@@ -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
99103unsigned 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
0 commit comments