Skip to content

Commit 1bf8b1c

Browse files
committed
Implement sensing_mousex block
1 parent 0a9314a commit 1bf8b1c

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
@@ -26,6 +26,7 @@ void SensingBlocks::registerBlocks(IEngine *engine)
2626
engine->addCompileFunction(this, "sensing_distanceto", &compileDistanceTo);
2727
engine->addCompileFunction(this, "sensing_keypressed", &compileKeyPressed);
2828
engine->addCompileFunction(this, "sensing_mousedown", &compileMouseDown);
29+
engine->addCompileFunction(this, "sensing_mousex", &compileMouseX);
2930
engine->addCompileFunction(this, "sensing_timer", &compileTimer);
3031
engine->addCompileFunction(this, "sensing_resettimer", &compileResetTimer);
3132
engine->addCompileFunction(this, "sensing_current", &compileCurrent);
@@ -80,6 +81,11 @@ void SensingBlocks::compileMouseDown(Compiler *compiler)
8081
compiler->addFunctionCall(&mouseDown);
8182
}
8283

84+
void SensingBlocks::compileMouseX(Compiler *compiler)
85+
{
86+
compiler->addFunctionCall(&mouseX);
87+
}
88+
8389
void SensingBlocks::compileTimer(Compiler *compiler)
8490
{
8591
compiler->addFunctionCall(&timer);
@@ -145,6 +151,12 @@ unsigned int SensingBlocks::mouseDown(VirtualMachine *vm)
145151
return 0;
146152
}
147153

154+
unsigned int SensingBlocks::mouseX(VirtualMachine *vm)
155+
{
156+
vm->addReturnValue(vm->engine()->mouseX());
157+
return 0;
158+
}
159+
148160
unsigned int SensingBlocks::distanceTo(VirtualMachine *vm)
149161
{
150162
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
@@ -41,13 +41,15 @@ class SensingBlocks : public IBlockSection
4141
static void compileDistanceTo(Compiler *compiler);
4242
static void compileKeyPressed(Compiler *compiler);
4343
static void compileMouseDown(Compiler *compiler);
44+
static void compileMouseX(Compiler *compiler);
4445
static void compileTimer(Compiler *compiler);
4546
static void compileResetTimer(Compiler *compiler);
4647
static void compileCurrent(Compiler *compiler);
4748
static void compileDaysSince2000(Compiler *compiler);
4849

4950
static unsigned int keyPressed(VirtualMachine *vm);
5051
static unsigned int mouseDown(VirtualMachine *vm);
52+
static unsigned int mouseX(VirtualMachine *vm);
5153

5254
static unsigned int distanceTo(VirtualMachine *vm);
5355
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
@@ -100,6 +100,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
100100
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_distanceto", &SensingBlocks::compileDistanceTo));
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));
103+
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_mousex", &SensingBlocks::compileMouseX));
103104
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_timer", &SensingBlocks::compileTimer));
104105
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_resettimer", &SensingBlocks::compileResetTimer));
105106
EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "sensing_current", &SensingBlocks::compileCurrent));
@@ -381,6 +382,47 @@ TEST_F(SensingBlocksTest, MouseDownImpl)
381382
ASSERT_EQ(vm.getInput(0, 1)->toBool(), false);
382383
}
383384

385+
TEST_F(SensingBlocksTest, MouseX)
386+
{
387+
Compiler compiler(&m_engineMock);
388+
389+
auto block = std::make_shared<Block>("a", "sensing_mousex");
390+
391+
EXPECT_CALL(m_engineMock, functionIndex(&SensingBlocks::mouseX)).WillOnce(Return(0));
392+
compiler.init();
393+
394+
compiler.setBlock(block);
395+
SensingBlocks::compileMouseX(&compiler);
396+
397+
compiler.end();
398+
399+
ASSERT_EQ(compiler.bytecode(), std::vector<unsigned int>({ vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT }));
400+
ASSERT_TRUE(compiler.constValues().empty());
401+
}
402+
403+
TEST_F(SensingBlocksTest, MouseXImpl)
404+
{
405+
static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT };
406+
static BlockFunc functions[] = { &SensingBlocks::mouseX };
407+
408+
VirtualMachine vm(nullptr, &m_engineMock, nullptr);
409+
vm.setFunctions(functions);
410+
411+
EXPECT_CALL(m_engineMock, mouseX()).WillOnce(Return(48.165));
412+
vm.setBytecode(bytecode);
413+
vm.run();
414+
415+
ASSERT_EQ(vm.registerCount(), 1);
416+
ASSERT_EQ(vm.getInput(0, 1)->toDouble(), 48.165);
417+
418+
EXPECT_CALL(m_engineMock, mouseX()).WillOnce(Return(-239.09));
419+
vm.reset();
420+
vm.run();
421+
422+
ASSERT_EQ(vm.registerCount(), 1);
423+
ASSERT_EQ(vm.getInput(0, 1)->toDouble(), -239.09);
424+
}
425+
384426
TEST_F(SensingBlocksTest, Timer)
385427
{
386428
Compiler compiler(&m_engineMock);

0 commit comments

Comments
 (0)