From c8f8f1ac9cbfd78d02cb93f8b16b8aa5f401bcd8 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sun, 28 Feb 2021 00:16:55 -0600 Subject: [PATCH] Compile looks_changeeffectby and looks_seteffectto --- src/blocks/scratch3_looks.js | 2 +- src/compiler/compat-blocks.js | 2 -- src/compiler/irgen.js | 12 ++++++++++++ src/compiler/jsgen.js | 10 ++++++++++ src/sprites/rendered-target.js | 2 +- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/blocks/scratch3_looks.js b/src/blocks/scratch3_looks.js index 62636fa7..f5a19115 100644 --- a/src/blocks/scratch3_looks.js +++ b/src/blocks/scratch3_looks.js @@ -524,7 +524,7 @@ class Scratch3LooksBlocks { ); } - clampEffect (effect, value) { + clampEffect (effect, value) { // used by compiler let clampedValue = value; switch (effect) { case 'ghost': diff --git a/src/compiler/compat-blocks.js b/src/compiler/compat-blocks.js index cd2612db..75a7f84b 100644 --- a/src/compiler/compat-blocks.js +++ b/src/compiler/compat-blocks.js @@ -9,11 +9,9 @@ const stacked = [ 'control_clear_counter', 'control_get_counter', 'control_incr_counter', - 'looks_changeeffectby', 'looks_changestretchby', 'looks_say', 'looks_sayforsecs', - 'looks_seteffectto', 'looks_setstretchto', 'looks_switchbackdroptoandwait', 'looks_think', diff --git a/src/compiler/irgen.js b/src/compiler/irgen.js index 8679763e..b082c5a0 100644 --- a/src/compiler/irgen.js +++ b/src/compiler/irgen.js @@ -844,6 +844,12 @@ class ScriptTreeGenerator { broadcast: this.descendInputOfBlock(block, 'BROADCAST_INPUT') }; + case 'looks_changeeffectby': + return { + kind: 'looks.changeEffect', + effect: block.fields.EFFECT.value.toLowerCase(), + value: this.descendInputOfBlock(block, 'CHANGE') + }; case 'looks_changesizeby': return { kind: 'looks.changeSize', @@ -885,6 +891,12 @@ class ScriptTreeGenerator { return { kind: 'looks.nextCostume' }; + case 'looks_seteffectto': + return { + kind: 'looks.setEffect', + effect: block.fields.EFFECT.value.toLowerCase(), + value: this.descendInputOfBlock(block, 'VALUE') + }; case 'looks_setsizeto': return { kind: 'looks.setSize', diff --git a/src/compiler/jsgen.js b/src/compiler/jsgen.js index 35218316..f2782525 100644 --- a/src/compiler/jsgen.js +++ b/src/compiler/jsgen.js @@ -781,6 +781,11 @@ class JSGenerator { case 'looks.clearEffects': this.source += 'target.clearEffects();\n'; break; + case 'looks.changeEffect': + if (this.target.effects.hasOwnProperty(node.effect)) { + this.source += `target.setEffect("${sanitize(node.effect)}", runtime.ext_scratch3_looks.clampEffect("${sanitize(node.effect)}", ${this.descendInput(node.value).asNumber()} + target.effects["${sanitize(node.effect)}"]));\n`; + } + break; case 'looks.changeSize': this.source += `target.setSize(target.size + ${this.descendInput(node.size).asNumber()});\n`; break; @@ -803,6 +808,11 @@ class JSGenerator { case 'looks.nextCostume': this.source += 'target.setCostume(target.currentCostume + 1);\n'; break; + case 'looks.setEffect': + if (this.target.effects.hasOwnProperty(node.effect)) { + this.source += `target.setEffect("${sanitize(node.effect)}", runtime.ext_scratch3_looks.clampEffect("${sanitize(node.effect)}", ${this.descendInput(node.value).asNumber()}));\n`; + } + break; case 'looks.setSize': this.source += `target.setSize(${this.descendInput(node.size).asNumber()});\n`; break; diff --git a/src/sprites/rendered-target.js b/src/sprites/rendered-target.js index 43155319..b477f232 100644 --- a/src/sprites/rendered-target.js +++ b/src/sprites/rendered-target.js @@ -400,7 +400,7 @@ class RenderedTarget extends Target { * @param {!string} effectName Name of effect (see `RenderedTarget.prototype.effects`). * @param {!number} value Numerical magnitude of effect. */ - setEffect (effectName, value) { + setEffect (effectName, value) { // used by compiler if (!this.effects.hasOwnProperty(effectName)) return; this.effects[effectName] = value; if (this.renderer) {