Import monitors from sb2 files.

Paired with @kchadha on all of this.
This commit is contained in:
Paul Kaplan 2018-05-08 14:09:18 -04:00
parent 784705d46e
commit 4713f47fb7
8 changed files with 196 additions and 22 deletions

View file

@ -441,22 +441,34 @@ class Blocks {
break;
}
const isSpriteSpecific = optRuntime.monitorBlockInfo.hasOwnProperty(block.opcode) &&
optRuntime.monitorBlockInfo[block.opcode].isSpriteSpecific;
// Variable blocks may be sprite specific depending on the owner of the variable
let isSpriteLocalVariable = false;
if (block.opcode === 'data_variable') {
isSpriteLocalVariable = !optRuntime.getEditingTarget().isStage &&
optRuntime.getEditingTarget().variables[block.fields.VARIABLE.id];
} else if (block.opcode === 'data_listcontents') {
isSpriteLocalVariable = !optRuntime.getEditingTarget().isStage &&
optRuntime.getEditingTarget().variables[block.fields.LIST.id];
}
const isSpriteSpecific = isSpriteLocalVariable ||
(optRuntime.monitorBlockInfo.hasOwnProperty(block.opcode) &&
optRuntime.monitorBlockInfo[block.opcode].isSpriteSpecific);
block.targetId = isSpriteSpecific ? optRuntime.getEditingTarget().id : null;
if (wasMonitored && !block.isMonitored) {
optRuntime.requestRemoveMonitor(block.id);
} else if (!wasMonitored && block.isMonitored) {
optRuntime.requestAddMonitor(MonitorRecord({
// @todo(vm#564) this will collide if multiple sprites use same block
id: block.id,
targetId: block.targetId,
spriteName: block.targetId ? optRuntime.getTargetById(block.targetId).getName() : null,
opcode: block.opcode,
params: this._getBlockParams(block),
// @todo(vm#565) for numerical values with decimals, some countries use comma
value: ''
value: '',
mode: block.opcode === 'data_listcontents' ? 'list' : 'default'
}));
}
break;