@@ -99,12 +99,15 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
99
99
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_turnleft" , &MotionBlocks::compileTurnLeft));
100
100
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_pointindirection" , &MotionBlocks::compilePointInDirection));
101
101
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_pointtowards" , &MotionBlocks::compilePointTowards));
102
+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_gotoxy" , &MotionBlocks::compileGoToXY));
102
103
103
104
// Inputs
104
105
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
105
106
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DEGREES" , MotionBlocks::DEGREES));
106
107
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DIRECTION" , MotionBlocks::DIRECTION));
107
108
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " TOWARDS" , MotionBlocks::TOWARDS));
109
+ EXPECT_CALL (m_engineMock, addInput (m_section.get (), " X" , MotionBlocks::X));
110
+ EXPECT_CALL (m_engineMock, addInput (m_section.get (), " Y" , MotionBlocks::Y));
108
111
109
112
m_section->registerBlocks (&m_engineMock);
110
113
}
@@ -436,3 +439,42 @@ TEST_F(MotionBlocksTest, PointTowardsImpl)
436
439
ASSERT_EQ (std::round (sprite.direction () * 100 ) / 100 , intPosResults[i]);
437
440
}
438
441
}
442
+
443
+ TEST_F (MotionBlocksTest, GoToXY)
444
+ {
445
+ Compiler compiler (&m_engineMock);
446
+
447
+ // turn right (12.05) degrees
448
+ auto block = std::make_shared<Block>(" a" , " motion_gotoxy" );
449
+ addValueInput (block, " X" , MotionBlocks::X, 95.2 );
450
+ addValueInput (block, " Y" , MotionBlocks::Y, -175.9 );
451
+
452
+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::goToXY)).WillOnce (Return (0 ));
453
+
454
+ compiler.init ();
455
+ compiler.setBlock (block);
456
+ MotionBlocks::compileGoToXY (&compiler);
457
+ compiler.end ();
458
+
459
+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_CONST, 1 , vm::OP_EXEC, 0 , vm::OP_HALT }));
460
+ ASSERT_EQ (compiler.constValues (), std::vector<Value>({ 95.2 , -175.9 }));
461
+ }
462
+
463
+ TEST_F (MotionBlocksTest, GoToXYImpl)
464
+ {
465
+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_CONST, 1 , vm::OP_EXEC, 0 , vm::OP_HALT };
466
+ static BlockFunc functions[] = { &MotionBlocks::goToXY };
467
+ static Value constValues[] = { 95.2 , -175.9 };
468
+
469
+ Sprite sprite;
470
+
471
+ VirtualMachine vm (&sprite, nullptr , nullptr );
472
+ vm.setBytecode (bytecode);
473
+ vm.setFunctions (functions);
474
+ vm.setConstValues (constValues);
475
+ vm.run ();
476
+
477
+ ASSERT_EQ (vm.registerCount (), 0 );
478
+ ASSERT_EQ (sprite.x (), 95.2 );
479
+ ASSERT_EQ (sprite.y (), -175.9 );
480
+ }
0 commit comments