Skip to content

Commit 49071f7

Browse files
committed
Implement looks_size block
1 parent f2a0be8 commit 49071f7

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

src/blocks/looksblocks.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ void LooksBlocks::registerBlocks(IEngine *engine)
2020
engine->addCompileFunction(this, "looks_hide", &compileHide);
2121
engine->addCompileFunction(this, "looks_changesizeby", &compileChangeSizeBy);
2222
engine->addCompileFunction(this, "looks_setsizeto", &compileSetSizeTo);
23+
engine->addCompileFunction(this, "looks_size", &compileSize);
2324

2425
// Inputs
2526
engine->addInput(this, "CHANGE", CHANGE);
@@ -48,6 +49,11 @@ void LooksBlocks::compileSetSizeTo(Compiler *compiler)
4849
compiler->addFunctionCall(&setSizeTo);
4950
}
5051

52+
void LooksBlocks::compileSize(Compiler *compiler)
53+
{
54+
compiler->addFunctionCall(&size);
55+
}
56+
5157
unsigned int LooksBlocks::show(VirtualMachine *vm)
5258
{
5359
Sprite *sprite = dynamic_cast<Sprite *>(vm->target());
@@ -87,3 +93,15 @@ unsigned int LooksBlocks::setSizeTo(VirtualMachine *vm)
8793

8894
return 1;
8995
}
96+
97+
unsigned int LooksBlocks::size(VirtualMachine *vm)
98+
{
99+
Sprite *sprite = dynamic_cast<Sprite *>(vm->target());
100+
101+
if (sprite)
102+
vm->addReturnValue(sprite->size());
103+
else
104+
vm->addReturnValue(0);
105+
106+
return 0;
107+
}

src/blocks/looksblocks.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@ class LooksBlocks : public IBlockSection
3333
static void compileHide(Compiler *compiler);
3434
static void compileChangeSizeBy(Compiler *compiler);
3535
static void compileSetSizeTo(Compiler *compiler);
36+
static void compileSize(Compiler *compiler);
3637

3738
static unsigned int show(VirtualMachine *vm);
3839
static unsigned int hide(VirtualMachine *vm);
3940
static unsigned int changeSizeBy(VirtualMachine *vm);
4041
static unsigned int setSizeTo(VirtualMachine *vm);
42+
static unsigned int size(VirtualMachine *vm);
4143
};
4244

4345
} // namespace libscratchcpp

test/blocks/looks_blocks_test.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
9696
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "looks_hide", &LooksBlocks::compileHide));
9797
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "looks_changesizeby", &LooksBlocks::compileChangeSizeBy));
9898
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "looks_setsizeto", &LooksBlocks::compileSetSizeTo));
99+
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "looks_size", &LooksBlocks::compileSize));
99100

100101
// Inputs
101102
EXPECT_CALL(m_engineMock, addInput(m_section.get(), "CHANGE", LooksBlocks::CHANGE));
@@ -261,3 +262,37 @@ TEST_F(LooksBlocksTest, SetSizeToImpl)
261262
ASSERT_EQ(vm.registerCount(), 0);
262263
ASSERT_EQ(sprite.size(), 87.654);
263264
}
265+
266+
TEST_F(LooksBlocksTest, Size)
267+
{
268+
Compiler compiler(&m_engineMock);
269+
270+
auto block = std::make_shared<Block>("a", "looks_size");
271+
272+
EXPECT_CALL(m_engineMock, functionIndex(&LooksBlocks::size)).WillOnce(Return(0));
273+
274+
compiler.init();
275+
compiler.setBlock(block);
276+
LooksBlocks::compileSize(&compiler);
277+
compiler.end();
278+
279+
ASSERT_EQ(compiler.bytecode(), std::vector<unsigned int>({ vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT }));
280+
ASSERT_TRUE(compiler.constValues().empty());
281+
}
282+
283+
TEST_F(LooksBlocksTest, SizeImpl)
284+
{
285+
static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT };
286+
static BlockFunc functions[] = { &LooksBlocks::size };
287+
288+
Sprite sprite;
289+
sprite.setSize(-51.0684);
290+
291+
VirtualMachine vm(&sprite, nullptr, nullptr);
292+
vm.setBytecode(bytecode);
293+
vm.setFunctions(functions);
294+
vm.run();
295+
296+
ASSERT_EQ(vm.registerCount(), 1);
297+
ASSERT_EQ(vm.getInput(0, 1)->toDouble(), -51.0684);
298+
}

0 commit comments

Comments
 (0)