mirror of
https://github.com/scratchfoundation/scratch-vm.git
synced 2024-12-23 14:32:59 -05:00
commit
f567e34c3a
3 changed files with 28 additions and 11 deletions
|
@ -14,8 +14,13 @@ const Variable = require('./variable');
|
||||||
* and handle updates from Scratch Blocks events.
|
* 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 {
|
class Blocks {
|
||||||
constructor () {
|
constructor (optNoGlow) {
|
||||||
/**
|
/**
|
||||||
* All blocks in the workspace.
|
* All blocks in the workspace.
|
||||||
* Keys are block IDs, values are metadata about the block.
|
* Keys are block IDs, values are metadata about the block.
|
||||||
|
@ -61,6 +66,17 @@ class Blocks {
|
||||||
_executeCached: {}
|
_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 () {
|
duplicate () {
|
||||||
const newBlocks = new Blocks();
|
const newBlocks = new Blocks(this.forceNoGlow);
|
||||||
newBlocks._blocks = Clone.simple(this._blocks);
|
newBlocks._blocks = Clone.simple(this._blocks);
|
||||||
newBlocks._scripts = Clone.simple(this._scripts);
|
newBlocks._scripts = Clone.simple(this._scripts);
|
||||||
return newBlocks;
|
return newBlocks;
|
||||||
|
|
|
@ -475,6 +475,14 @@ const execute = function (sequencer, thread) {
|
||||||
|
|
||||||
// Fields are set during opCached initialization.
|
// 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.
|
// Inputs are set during previous steps in the loop.
|
||||||
|
|
||||||
let primitiveReportedValue = null;
|
let primitiveReportedValue = null;
|
||||||
|
@ -530,13 +538,6 @@ const execute = function (sequencer, thread) {
|
||||||
break;
|
break;
|
||||||
} else if (thread.status === Thread.STATUS_RUNNING) {
|
} else if (thread.status === Thread.STATUS_RUNNING) {
|
||||||
if (lastOperation) {
|
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);
|
handleReport(primitiveReportedValue, sequencer, thread, opCached, lastOperation);
|
||||||
} else {
|
} else {
|
||||||
// By definition a block that is not last in the list has a
|
// 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.`
|
* These will execute on `_editingTarget.`
|
||||||
* @type {!Blocks}
|
* @type {!Blocks}
|
||||||
*/
|
*/
|
||||||
this.flyoutBlocks = new Blocks();
|
this.flyoutBlocks = new Blocks(true /* force no glow */);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Storage container for monitor blocks.
|
* Storage container for monitor blocks.
|
||||||
* These will execute on a target maybe
|
* These will execute on a target maybe
|
||||||
* @type {!Blocks}
|
* @type {!Blocks}
|
||||||
*/
|
*/
|
||||||
this.monitorBlocks = new Blocks();
|
this.monitorBlocks = new Blocks(true /* force no glow */);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currently known editing target for the VM.
|
* Currently known editing target for the VM.
|
||||||
|
|
Loading…
Reference in a new issue