diff --git a/playground/playground.js b/playground/playground.js index d47f097a7..2b3cb28c4 100644 --- a/playground/playground.js +++ b/playground/playground.js @@ -49,13 +49,20 @@ window.onload = function() { }; updateThreadExplorer(); - // Feedback for stacks running. + // Feedback for stacks and blocks running. vm.runtime.on('STACK_GLOW_ON', function(blockId) { workspace.glowStack(blockId, true); }); vm.runtime.on('STACK_GLOW_OFF', function(blockId) { workspace.glowStack(blockId, false); }); + vm.runtime.on('BLOCK_GLOW_ON', function(blockId) { + workspace.glowBlock(blockId, true); + }); + vm.runtime.on('BLOCK_GLOW_OFF', function(blockId) { + workspace.glowBlock(blockId, false); + }); + // Run threads vm.runtime.start(); diff --git a/src/engine/runtime.js b/src/engine/runtime.js index 9531eadc7..c4aa06e49 100644 --- a/src/engine/runtime.js +++ b/src/engine/runtime.js @@ -199,7 +199,13 @@ Runtime.prototype.startDistanceSensors = function () { Runtime.prototype.stopAll = function () { var threadsCopy = this.threads.slice(); while (threadsCopy.length > 0) { - this._removeThread(threadsCopy.pop()); + var poppedThread = threadsCopy.pop(); + // Unglow any blocks on this thread's stack. + for (var i = 0; i < poppedThread.stack.length; i++) { + this.glowBlock(poppedThread.stack[i], false); + } + // Actually remove the thread. + this._removeThread(poppedThread); } // @todo call stop function in all extensions/packages/WeDo stub if (window.native) { diff --git a/src/engine/sequencer.js b/src/engine/sequencer.js index 95a28f7bf..2f1126d43 100644 --- a/src/engine/sequencer.js +++ b/src/engine/sequencer.js @@ -134,6 +134,8 @@ Sequencer.prototype.stepThread = function (thread) { // Pop the stack and stack frame thread.stack.pop(); thread.stackFrames.pop(); + // Stop showing run feedback in the editor. + instance.runtime.glowBlock(currentBlock, false); }; /** @@ -199,6 +201,9 @@ Sequencer.prototype.stepThread = function (thread) { } } + // Start showing run feedback in the editor. + this.runtime.glowBlock(currentBlock, true); + if (!opcode) { console.warn('Could not get opcode for block: ' + currentBlock); }