Skip to content

Commit 89afe6a

Browse files
committed
Implement sensing_mousey block
1 parent 1bf8b1c commit 89afe6a

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

src/blocks/sensingblocks.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ void SensingBlocks::registerBlocks(IEngine *engine)
2727
engine->addCompileFunction(this, "sensing_keypressed", &compileKeyPressed);
2828
engine->addCompileFunction(this, "sensing_mousedown", &compileMouseDown);
2929
engine->addCompileFunction(this, "sensing_mousex", &compileMouseX);
30+
engine->addCompileFunction(this, "sensing_mousey", &compileMouseY);
3031
engine->addCompileFunction(this, "sensing_timer", &compileTimer);
3132
engine->addCompileFunction(this, "sensing_resettimer", &compileResetTimer);
3233
engine->addCompileFunction(this, "sensing_current", &compileCurrent);
@@ -86,6 +87,11 @@ void SensingBlocks::compileMouseX(Compiler *compiler)
8687
compiler->addFunctionCall(&mouseX);
8788
}
8889

90+
void SensingBlocks::compileMouseY(Compiler *compiler)
91+
{
92+
compiler->addFunctionCall(&mouseY);
93+
}
94+
8995
void SensingBlocks::compileTimer(Compiler *compiler)
9096
{
9197
compiler->addFunctionCall(&timer);
@@ -157,6 +163,12 @@ unsigned int SensingBlocks::mouseX(VirtualMachine *vm)
157163
return 0;
158164
}
159165

166+
unsigned int SensingBlocks::mouseY(VirtualMachine *vm)
167+
{
168+
vm->addReturnValue(vm->engine()->mouseY());
169+
return 0;
170+
}
171+
160172
unsigned int SensingBlocks::distanceTo(VirtualMachine *vm)
161173
{
162174
Sprite *sprite = dynamic_cast<Sprite *>(vm->target());

src/blocks/sensingblocks.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class SensingBlocks : public IBlockSection
4242
static void compileKeyPressed(Compiler *compiler);
4343
static void compileMouseDown(Compiler *compiler);
4444
static void compileMouseX(Compiler *compiler);
45+
static void compileMouseY(Compiler *compiler);
4546
static void compileTimer(Compiler *compiler);
4647
static void compileResetTimer(Compiler *compiler);
4748
static void compileCurrent(Compiler *compiler);
@@ -50,6 +51,7 @@ class SensingBlocks : public IBlockSection
5051
static unsigned int keyPressed(VirtualMachine *vm);
5152
static unsigned int mouseDown(VirtualMachine *vm);
5253
static unsigned int mouseX(VirtualMachine *vm);
54+
static unsigned int mouseY(VirtualMachine *vm);
5355

5456
static unsigned int distanceTo(VirtualMachine *vm);
5557
static unsigned int distanceToByIndex(VirtualMachine *vm);

test/blocks/sensing_blocks_test.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
101101
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_keypressed", &SensingBlocks::compileKeyPressed));
102102
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_mousedown", &SensingBlocks::compileMouseDown));
103103
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_mousex", &SensingBlocks::compileMouseX));
104+
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_mousey", &SensingBlocks::compileMouseY));
104105
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_timer", &SensingBlocks::compileTimer));
105106
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_resettimer", &SensingBlocks::compileResetTimer));
106107
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_current", &SensingBlocks::compileCurrent));
@@ -423,6 +424,47 @@ TEST_F(SensingBlocksTest, MouseXImpl)
423424
ASSERT_EQ(vm.getInput(0, 1)->toDouble(), -239.09);
424425
}
425426

427+
TEST_F(SensingBlocksTest, MouseY)
428+
{
429+
Compiler compiler(&m_engineMock);
430+
431+
auto block = std::make_shared<Block>("a", "sensing_mousey");
432+
433+
EXPECT_CALL(m_engineMock, functionIndex(&SensingBlocks::mouseY)).WillOnce(Return(0));
434+
compiler.init();
435+
436+
compiler.setBlock(block);
437+
SensingBlocks::compileMouseY(&compiler);
438+
439+
compiler.end();
440+
441+
ASSERT_EQ(compiler.bytecode(), std::vector<unsigned int>({ vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT }));
442+
ASSERT_TRUE(compiler.constValues().empty());
443+
}
444+
445+
TEST_F(SensingBlocksTest, MouseYImpl)
446+
{
447+
static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT };
448+
static BlockFunc functions[] = { &SensingBlocks::mouseY };
449+
450+
VirtualMachine vm(nullptr, &m_engineMock, nullptr);
451+
vm.setFunctions(functions);
452+
453+
EXPECT_CALL(m_engineMock, mouseY()).WillOnce(Return(159.084));
454+
vm.setBytecode(bytecode);
455+
vm.run();
456+
457+
ASSERT_EQ(vm.registerCount(), 1);
458+
ASSERT_EQ(vm.getInput(0, 1)->toDouble(), 159.084);
459+
460+
EXPECT_CALL(m_engineMock, mouseY()).WillOnce(Return(-95.564));
461+
vm.reset();
462+
vm.run();
463+
464+
ASSERT_EQ(vm.registerCount(), 1);
465+
ASSERT_EQ(vm.getInput(0, 1)->toDouble(), -95.564);
466+
}
467+
426468
TEST_F(SensingBlocksTest, Timer)
427469
{
428470
Compiler compiler(&m_engineMock);

0 commit comments

Comments
 (0)