Skip to content

Commit 30f7819

Browse files
committed
Load coordinates of top level blocks
1 parent 01c544f commit 30f7819

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

src/internal/scratch3reader.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ bool Scratch3Reader::load()
9292
reporterInfo->setValueId(jsonToValue(blockInfo[2]).toString());
9393
reporterInfo->setType(static_cast<InputValue::Type>(blockInfo[0]));
9494

95+
block->setX(blockInfo[3]);
96+
block->setY(blockInfo[4]);
97+
9598
target->addBlock(block);
9699
continue;
97100
}
@@ -108,6 +111,17 @@ bool Scratch3Reader::load()
108111
if (!blockInfo["parent"].is_null())
109112
parentId = blockInfo["parent"];
110113
block->setParentId(parentId);
114+
READER_STEP(step, "target -> block -> parent");
115+
if (!blockInfo["parent"].is_null())
116+
parentId = blockInfo["parent"];
117+
block->setParentId(parentId);
118+
119+
if (block->topLevel()) {
120+
READER_STEP(step, "target -> block -> x");
121+
block->setX(blockInfo["x"]);
122+
READER_STEP(step, "target -> block -> y");
123+
block->setY(blockInfo["y"]);
124+
}
111125

112126
// inputs
113127
READER_STEP(step, "target -> block -> inputs");

test/load_project/load_project_test.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ TEST(LoadProjectTest, LoadTestProject)
228228
ASSERT_EQ(sprite1->name(), "Sprite1");
229229
ASSERT_EQ(sprite1->variables().size(), 1);
230230
ASSERT_EQ(sprite1->lists().size(), 1);
231-
ASSERT_EQ(sprite1->blocks().size(), 18);
231+
ASSERT_EQ(sprite1->blocks().size(), 19);
232232
ASSERT_EQ(sprite1->costumes().size(), 2);
233233
ASSERT_EQ(sprite1->comments().size(), 1);
234234
ASSERT_EQ(sprite1->costumeIndex(), 1);
@@ -278,6 +278,8 @@ TEST(LoadProjectTest, LoadTestProject)
278278
ASSERT_TRUE(sprite1->greenFlagBlocks()[0]);
279279
ASSERT_FALSE(sprite1->greenFlagBlocks()[0]->isTopLevelReporter());
280280
ASSERT_EQ(sprite1->greenFlagBlocks()[0]->opcode(), "event_whenflagclicked");
281+
ASSERT_EQ(sprite1->greenFlagBlocks()[0]->x(), 0);
282+
ASSERT_EQ(sprite1->greenFlagBlocks()[0]->y(), 0);
281283
auto block = sprite1->greenFlagBlocks()[0]->next();
282284
ASSERT_TRUE(block);
283285
ASSERT_EQ(block->parent(), sprite1->greenFlagBlocks()[0]);
@@ -343,6 +345,8 @@ TEST(LoadProjectTest, LoadTestProject)
343345
}
344346
}
345347
ASSERT_TRUE(defineBlock);
348+
ASSERT_EQ(defineBlock->x(), 0);
349+
ASSERT_EQ(defineBlock->y(), 384);
346350
ASSERT_INPUT(defineBlock, "custom_block");
347351
auto blockPrototype = GET_INPUT(defineBlock, "custom_block")->valueBlock();
348352
ASSERT_TRUE(blockPrototype);
@@ -372,6 +376,17 @@ TEST(LoadProjectTest, LoadTestProject)
372376
ASSERT_TRUE(argBlock);
373377
ASSERT_EQ(argBlock->opcode(), "argument_reporter_string_number");
374378

379+
std::shared_ptr<Block> keyPressedBlock = nullptr;
380+
for (auto b : blocks) {
381+
if (b->opcode() == "event_whenkeypressed") {
382+
keyPressedBlock = b;
383+
break;
384+
}
385+
}
386+
ASSERT_TRUE(keyPressedBlock);
387+
ASSERT_EQ(keyPressedBlock->x(), 488);
388+
ASSERT_EQ(keyPressedBlock->y(), 152);
389+
375390
// Balloon1
376391
ASSERT_NE(engine->findTarget("Balloon1"), -1);
377392
Sprite *sprite2 = dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Balloon1")));
@@ -651,6 +666,8 @@ TEST(LoadProjectTest, LoadTopLevelReporterProject)
651666
auto block1 = sprite1->blockAt(0);
652667
ASSERT_TRUE(block1);
653668
ASSERT_TRUE(block1->isTopLevelReporter());
669+
ASSERT_EQ(block1->x(), 335);
670+
ASSERT_EQ(block1->y(), 335);
654671
InputValue *reporterInfo = block1->topLevelReporterInfo();
655672
ASSERT_TRUE(reporterInfo);
656673
ASSERT_EQ(reporterInfo->type(), InputValue::Type::Variable);
@@ -661,6 +678,8 @@ TEST(LoadProjectTest, LoadTopLevelReporterProject)
661678
auto block2 = sprite1->blockAt(1);
662679
ASSERT_TRUE(block2);
663680
ASSERT_TRUE(block2->isTopLevelReporter());
681+
ASSERT_EQ(block2->x(), 313);
682+
ASSERT_EQ(block2->y(), 435);
664683
reporterInfo = block2->topLevelReporterInfo();
665684
ASSERT_TRUE(reporterInfo);
666685
ASSERT_EQ(reporterInfo->type(), InputValue::Type::List);

test/load_test.sb3

111 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)