Skip to content

Commit 989b8d0

Browse files
committed
Set monitors of variables and lists
1 parent bb2aa3e commit 989b8d0

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/engine/internal/engine.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,19 +164,31 @@ void Engine::resolveIds()
164164
if (field->name() == "VARIABLE") {
165165
std::string name = field->value().toString();
166166
int index = target->findVariable(name);
167+
std::shared_ptr<Variable> var;
167168

168-
if (index == -1)
169-
index = target->addVariable(std::make_shared<Variable>(monitor->id(), name));
169+
if (index == -1) {
170+
var = std::make_shared<Variable>(monitor->id(), name);
171+
index = target->addVariable(var);
172+
} else
173+
var = target->variableAt(index);
170174

171175
field->setValuePtr(target->variableAt(index));
176+
assert(var);
177+
var->setMonitor(monitor.get());
172178
} else if (field->name() == "LIST") {
173179
std::string name = field->value().toString();
174180
int index = target->findList(name);
181+
std::shared_ptr<List> list;
175182

176-
if (index == -1)
177-
index = target->addList(std::make_shared<List>(monitor->id(), name));
183+
if (index == -1) {
184+
list = std::make_shared<List>(monitor->id(), name);
185+
index = target->addList(list);
186+
} else
187+
list = target->listAt(index);
178188

179189
field->setValuePtr(target->listAt(index));
190+
assert(list);
191+
list->setMonitor(monitor.get());
180192
}
181193
}
182194

test/load_project/load_project_test.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,7 @@ TEST(LoadProjectTest, LoadTestProject)
460460
ASSERT_EQ(field->name(), "LIST");
461461
ASSERT_EQ(field->value(), "list1");
462462
ASSERT_EQ(field->valuePtr(), GET_LIST(stage, "list1"));
463+
ASSERT_EQ(GET_LIST(stage, "list1")->monitor(), monitor.get());
463464
ASSERT_EQ(monitor->sprite(), nullptr);
464465
ASSERT_EQ(monitor->width(), 167);
465466
ASSERT_EQ(monitor->height(), 93);
@@ -478,6 +479,7 @@ TEST(LoadProjectTest, LoadTestProject)
478479
ASSERT_EQ(field->name(), "LIST");
479480
ASSERT_EQ(field->value(), "list2");
480481
ASSERT_EQ(field->valuePtr(), GET_LIST(engine->targetAt(engine->findTarget("Sprite1")), "list2"));
482+
ASSERT_EQ(GET_LIST(engine->targetAt(engine->findTarget("Sprite1")), "list2")->monitor(), monitor.get());
481483
ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Sprite1"))));
482484
ASSERT_EQ(monitor->width(), 0);
483485
ASSERT_EQ(monitor->height(), 0);
@@ -496,6 +498,7 @@ TEST(LoadProjectTest, LoadTestProject)
496498
ASSERT_EQ(field->name(), "LIST");
497499
ASSERT_EQ(field->value(), "list2");
498500
ASSERT_EQ(field->valuePtr(), GET_LIST(engine->targetAt(engine->findTarget("Balloon1")), "list2"));
501+
ASSERT_EQ(GET_LIST(engine->targetAt(engine->findTarget("Balloon1")), "list2")->monitor(), monitor.get());
499502
ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Balloon1"))));
500503
ASSERT_EQ(monitor->width(), 0);
501504
ASSERT_EQ(monitor->height(), 0);
@@ -514,6 +517,7 @@ TEST(LoadProjectTest, LoadTestProject)
514517
ASSERT_EQ(field->name(), "VARIABLE");
515518
ASSERT_EQ(field->value(), "var1");
516519
ASSERT_EQ(field->valuePtr(), GET_VAR(stage, "var1"));
520+
ASSERT_EQ(GET_VAR(stage, "var1")->monitor(), monitor.get());
517521
ASSERT_EQ(monitor->sprite(), nullptr);
518522
ASSERT_EQ(monitor->width(), 0);
519523
ASSERT_EQ(monitor->height(), 0);
@@ -532,6 +536,7 @@ TEST(LoadProjectTest, LoadTestProject)
532536
ASSERT_EQ(field->name(), "VARIABLE");
533537
ASSERT_EQ(field->value(), "var2");
534538
ASSERT_EQ(field->valuePtr(), GET_VAR(engine->targetAt(engine->findTarget("Sprite1")), "var2"));
539+
ASSERT_EQ(GET_VAR(engine->targetAt(engine->findTarget("Sprite1")), "var2")->monitor(), monitor.get());
535540
ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Sprite1"))));
536541
ASSERT_EQ(monitor->width(), 0);
537542
ASSERT_EQ(monitor->height(), 0);
@@ -550,6 +555,7 @@ TEST(LoadProjectTest, LoadTestProject)
550555
ASSERT_EQ(field->name(), "VARIABLE");
551556
ASSERT_EQ(field->value(), "var2");
552557
ASSERT_EQ(field->valuePtr(), GET_VAR(engine->targetAt(engine->findTarget("Balloon1")), "var2"));
558+
ASSERT_EQ(GET_VAR(engine->targetAt(engine->findTarget("Balloon1")), "var2")->monitor(), monitor.get());
553559
ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Balloon1"))));
554560
ASSERT_EQ(monitor->width(), 0);
555561
ASSERT_EQ(monitor->height(), 0);
@@ -599,6 +605,7 @@ TEST(LoadProjectTest, LoadTestProject)
599605
ASSERT_EQ(field->name(), "VARIABLE");
600606
ASSERT_EQ(field->value(), "var4");
601607
ASSERT_EQ(field->valuePtr(), GET_VAR(stage, "var4"));
608+
ASSERT_EQ(GET_VAR(stage, "var4")->monitor(), monitor.get());
602609
ASSERT_EQ(monitor->sprite(), nullptr);
603610
ASSERT_EQ(monitor->width(), 0);
604611
ASSERT_EQ(monitor->height(), 0);
@@ -617,6 +624,7 @@ TEST(LoadProjectTest, LoadTestProject)
617624
ASSERT_EQ(field->name(), "VARIABLE");
618625
ASSERT_EQ(field->value(), "var5");
619626
ASSERT_EQ(field->valuePtr(), GET_VAR(stage, "var5"));
627+
ASSERT_EQ(GET_VAR(stage, "var5")->monitor(), monitor.get());
620628
ASSERT_EQ(monitor->sprite(), nullptr);
621629
ASSERT_EQ(monitor->width(), 0);
622630
ASSERT_EQ(monitor->height(), 0);

0 commit comments

Comments
 (0)