Skip to content

Commit a38e742

Browse files
committed
Create missing variable and list monitors before setting visibility
1 parent 1fc21b7 commit a38e742

File tree

4 files changed

+28
-20
lines changed

4 files changed

+28
-20
lines changed

src/blocks/listblocks.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,19 +142,23 @@ void ListBlocks::compileHideList(Compiler *compiler)
142142
compiler->addFunctionCall(&hideList);
143143
}
144144

145-
void ListBlocks::setListVisible(std::shared_ptr<List> list, bool visible)
145+
void ListBlocks::setListVisible(std::shared_ptr<List> list, bool visible, IEngine *engine)
146146
{
147147
if (list) {
148-
assert(list->monitor());
149-
list->monitor()->setVisible(visible);
148+
Monitor *monitor = list->monitor();
149+
150+
if (!monitor)
151+
monitor = engine->createListMonitor(list, "data_listcontents", "LIST", LIST);
152+
153+
monitor->setVisible(visible);
150154
}
151155
}
152156

153157
unsigned int ListBlocks::showGlobalList(VirtualMachine *vm)
154158
{
155159
if (Stage *target = vm->engine()->stage()) {
156160
int index = target->findListById(vm->getInput(0, 1)->toString());
157-
setListVisible(target->listAt(index), true);
161+
setListVisible(target->listAt(index), true, vm->engine());
158162
}
159163

160164
return 1;
@@ -166,10 +170,10 @@ unsigned int ListBlocks::showList(VirtualMachine *vm)
166170
if (!target->isStage() && static_cast<Sprite *>(target)->isClone()) {
167171
Sprite *sprite = static_cast<Sprite *>(target)->cloneSprite(); // use clone root list
168172
int index = sprite->findListById(vm->getInput(0, 1)->toString());
169-
setListVisible(sprite->listAt(index), true);
173+
setListVisible(sprite->listAt(index), true, vm->engine());
170174
} else {
171175
int index = target->findListById(vm->getInput(0, 1)->toString());
172-
setListVisible(target->listAt(index), true);
176+
setListVisible(target->listAt(index), true, vm->engine());
173177
}
174178
}
175179

@@ -180,7 +184,7 @@ unsigned int ListBlocks::hideGlobalList(VirtualMachine *vm)
180184
{
181185
if (Stage *target = vm->engine()->stage()) {
182186
int index = target->findListById(vm->getInput(0, 1)->toString());
183-
setListVisible(target->listAt(index), false);
187+
setListVisible(target->listAt(index), false, vm->engine());
184188
}
185189

186190
return 1;
@@ -192,10 +196,10 @@ unsigned int ListBlocks::hideList(VirtualMachine *vm)
192196
if (!target->isStage() && static_cast<Sprite *>(target)->isClone()) {
193197
Sprite *sprite = static_cast<Sprite *>(target)->cloneSprite(); // use clone root list
194198
int index = sprite->findListById(vm->getInput(0, 1)->toString());
195-
setListVisible(sprite->listAt(index), false);
199+
setListVisible(sprite->listAt(index), false, vm->engine());
196200
} else {
197201
int index = target->findListById(vm->getInput(0, 1)->toString());
198-
setListVisible(target->listAt(index), false);
202+
setListVisible(target->listAt(index), false, vm->engine());
199203
}
200204
}
201205

src/blocks/listblocks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class ListBlocks : public IBlockSection
4343
static void compileShowList(Compiler *compiler);
4444
static void compileHideList(Compiler *compiler);
4545

46-
static void setListVisible(std::shared_ptr<List> list, bool visible);
46+
static void setListVisible(std::shared_ptr<List> list, bool visible, IEngine *engine);
4747

4848
static unsigned int showGlobalList(VirtualMachine *vm);
4949
static unsigned int showList(VirtualMachine *vm);

src/blocks/variableblocks.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,19 +88,23 @@ void VariableBlocks::compileHideVariable(Compiler *compiler)
8888
compiler->addFunctionCall(&hideVariable);
8989
}
9090

91-
void VariableBlocks::setVarVisible(std::shared_ptr<Variable> var, bool visible)
91+
void VariableBlocks::setVarVisible(std::shared_ptr<Variable> var, bool visible, IEngine *engine)
9292
{
9393
if (var) {
94-
assert(var->monitor());
95-
var->monitor()->setVisible(visible);
94+
Monitor *monitor = var->monitor();
95+
96+
if (!monitor)
97+
monitor = engine->createVariableMonitor(var, "data_variable", "VARIABLE", VARIABLE);
98+
99+
monitor->setVisible(visible);
96100
}
97101
}
98102

99103
unsigned int VariableBlocks::showGlobalVariable(VirtualMachine *vm)
100104
{
101105
if (Stage *target = vm->engine()->stage()) {
102106
int index = target->findVariableById(vm->getInput(0, 1)->toString());
103-
setVarVisible(target->variableAt(index), true);
107+
setVarVisible(target->variableAt(index), true, vm->engine());
104108
}
105109

106110
return 1;
@@ -112,10 +116,10 @@ unsigned int VariableBlocks::showVariable(VirtualMachine *vm)
112116
if (!target->isStage() && static_cast<Sprite *>(target)->isClone()) {
113117
Sprite *sprite = static_cast<Sprite *>(target)->cloneSprite(); // use clone root variable
114118
int index = sprite->findVariableById(vm->getInput(0, 1)->toString());
115-
setVarVisible(sprite->variableAt(index), true);
119+
setVarVisible(sprite->variableAt(index), true, vm->engine());
116120
} else {
117121
int index = target->findVariableById(vm->getInput(0, 1)->toString());
118-
setVarVisible(target->variableAt(index), true);
122+
setVarVisible(target->variableAt(index), true, vm->engine());
119123
}
120124
}
121125

@@ -126,7 +130,7 @@ unsigned int VariableBlocks::hideGlobalVariable(VirtualMachine *vm)
126130
{
127131
if (Stage *target = vm->engine()->stage()) {
128132
int index = target->findVariableById(vm->getInput(0, 1)->toString());
129-
setVarVisible(target->variableAt(index), false);
133+
setVarVisible(target->variableAt(index), false, vm->engine());
130134
}
131135

132136
return 1;
@@ -138,10 +142,10 @@ unsigned int VariableBlocks::hideVariable(VirtualMachine *vm)
138142
if (!target->isStage() && static_cast<Sprite *>(target)->isClone()) {
139143
Sprite *sprite = static_cast<Sprite *>(target)->cloneSprite(); // use clone root variable
140144
int index = sprite->findVariableById(vm->getInput(0, 1)->toString());
141-
setVarVisible(sprite->variableAt(index), false);
145+
setVarVisible(sprite->variableAt(index), false, vm->engine());
142146
} else {
143147
int index = target->findVariableById(vm->getInput(0, 1)->toString());
144-
setVarVisible(target->variableAt(index), false);
148+
setVarVisible(target->variableAt(index), false, vm->engine());
145149
}
146150
}
147151

src/blocks/variableblocks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class VariableBlocks : public IBlockSection
3434
static void compileShowVariable(Compiler *compiler);
3535
static void compileHideVariable(Compiler *compiler);
3636

37-
static void setVarVisible(std::shared_ptr<Variable> var, bool visible);
37+
static void setVarVisible(std::shared_ptr<Variable> var, bool visible, IEngine *engine);
3838

3939
static unsigned int showGlobalVariable(VirtualMachine *vm);
4040
static unsigned int showVariable(VirtualMachine *vm);

0 commit comments

Comments
 (0)