mirror of
https://github.com/scratchfoundation/scratch-vm.git
synced 2025-01-14 11:39:59 -05:00
Fix stack glows so that stacks glow as soon as the first block in the stack starts running as opposed to after the first block has finished. Make sure that monitored reporters in the flyout are not glowing.
This commit is contained in:
parent
9242835be8
commit
62bf790d8f
3 changed files with 28 additions and 11 deletions
src/engine
|
@ -14,8 +14,13 @@ const Variable = require('./variable');
|
|||
* and handle updates from Scratch Blocks events.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create a block container.
|
||||
* @param {boolean} optNoGlow Optional flag to indicate that blocks in this container
|
||||
* should not request glows. This does not affect glows when clicking on a block to execute it.
|
||||
*/
|
||||
class Blocks {
|
||||
constructor () {
|
||||
constructor (optNoGlow) {
|
||||
/**
|
||||
* All blocks in the workspace.
|
||||
* Keys are block IDs, values are metadata about the block.
|
||||
|
@ -61,6 +66,17 @@ class Blocks {
|
|||
_executeCached: {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Flag which indicates that blocks in this container should not glow.
|
||||
* Blocks will still glow when clicked on, but this flag is used to control
|
||||
* whether the blocks in this container can request a glow as part of
|
||||
* a running stack. E.g. the flyout block container and the monitor block container
|
||||
* should not be able to request a glow, but blocks containers belonging to
|
||||
* sprites should.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.forceNoGlow = optNoGlow || false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -241,7 +257,7 @@ class Blocks {
|
|||
}
|
||||
|
||||
duplicate () {
|
||||
const newBlocks = new Blocks();
|
||||
const newBlocks = new Blocks(this.forceNoGlow);
|
||||
newBlocks._blocks = Clone.simple(this._blocks);
|
||||
newBlocks._scripts = Clone.simple(this._scripts);
|
||||
return newBlocks;
|
||||
|
|
|
@ -475,6 +475,14 @@ const execute = function (sequencer, thread) {
|
|||
|
||||
// Fields are set during opCached initialization.
|
||||
|
||||
// Blocks should glow when a script is starting,
|
||||
// not after it has finished (see #1404).
|
||||
// Only blocks in blockContainers that don't forceNoGlow
|
||||
// should request a glow.
|
||||
if (!blockContainer.forceNoGlow) {
|
||||
thread.requestScriptGlowInFrame = true;
|
||||
}
|
||||
|
||||
// Inputs are set during previous steps in the loop.
|
||||
|
||||
let primitiveReportedValue = null;
|
||||
|
@ -530,13 +538,6 @@ const execute = function (sequencer, thread) {
|
|||
break;
|
||||
} else if (thread.status === Thread.STATUS_RUNNING) {
|
||||
if (lastOperation) {
|
||||
if (typeof primitiveReportedValue === 'undefined') {
|
||||
// No value reported - potentially a command block.
|
||||
// Edge-activated hats don't request a glow; all
|
||||
// commands do.
|
||||
thread.requestScriptGlowInFrame = true;
|
||||
}
|
||||
|
||||
handleReport(primitiveReportedValue, sequencer, thread, opCached, lastOperation);
|
||||
} else {
|
||||
// By definition a block that is not last in the list has a
|
||||
|
|
|
@ -127,14 +127,14 @@ class Runtime extends EventEmitter {
|
|||
* These will execute on `_editingTarget.`
|
||||
* @type {!Blocks}
|
||||
*/
|
||||
this.flyoutBlocks = new Blocks();
|
||||
this.flyoutBlocks = new Blocks(true /* force no glow */);
|
||||
|
||||
/**
|
||||
* Storage container for monitor blocks.
|
||||
* These will execute on a target maybe
|
||||
* @type {!Blocks}
|
||||
*/
|
||||
this.monitorBlocks = new Blocks();
|
||||
this.monitorBlocks = new Blocks(true /* force no glow */);
|
||||
|
||||
/**
|
||||
* Currently known editing target for the VM.
|
||||
|
|
Loading…
Reference in a new issue