Skip to content

Commit 23d0f0d

Browse files
committed
Add onMoved() method to ISpriteHandler
1 parent 4c95f90 commit 23d0f0d

File tree

5 files changed

+36
-0
lines changed

5 files changed

+36
-0
lines changed

include/scratchcpp/ispritehandler.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class LIBSCRATCHCPP_EXPORT ISpriteHandler
3535
/*! Called when the Y-coordinate changes. */
3636
virtual void onYChanged(double y) = 0;
3737

38+
/*! Called when the sprite position changes. */
39+
virtual void onMoved(double oldX, double oldY, double newX, double newY) = 0;
40+
3841
/*! Called when the size changes. */
3942
virtual void onSizeChanged(double size) = 0;
4043

src/scratch/sprite.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,9 @@ void Sprite::setXY(double x, double y)
432432
{
433433
IEngine *eng = engine();
434434

435+
double oldX = impl->x;
436+
double oldY = impl->y;
437+
435438
if (eng && !eng->spriteFencingEnabled()) {
436439
impl->x = x;
437440
impl->y = y;
@@ -444,4 +447,7 @@ void Sprite::setXY(double x, double y)
444447
if (eng)
445448
eng->requestRedraw();
446449
}
450+
451+
if (impl->iface)
452+
impl->iface->onMoved(oldX, oldY, impl->x, impl->y);
447453
}

test/mocks/spritehandlermock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class SpriteHandlerMock : public ISpriteHandler
1818
MOCK_METHOD(void, onVisibleChanged, (bool), (override));
1919
MOCK_METHOD(void, onXChanged, (double), (override));
2020
MOCK_METHOD(void, onYChanged, (double), (override));
21+
MOCK_METHOD(void, onMoved, (double, double, double, double), (override));
2122
MOCK_METHOD(void, onSizeChanged, (double), (override));
2223
MOCK_METHOD(void, onDirectionChanged, (double), (override));
2324
MOCK_METHOD(void, onRotationStyleChanged, (Sprite::RotationStyle), (override));

test/scratch_classes/sprite_test.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ TEST(SpriteTest, XY)
261261
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
262262
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
263263
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
264+
EXPECT_CALL(handler, onMoved);
264265
EXPECT_CALL(handler, onXChanged);
265266
sprite.setX(319);
266267
ASSERT_EQ(sprite.x(), 319);
@@ -269,6 +270,7 @@ TEST(SpriteTest, XY)
269270
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
270271
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
271272
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
273+
EXPECT_CALL(handler, onMoved);
272274
EXPECT_CALL(handler, onXChanged);
273275
sprite.setX(75);
274276
ASSERT_EQ(sprite.x(), 75);
@@ -277,11 +279,13 @@ TEST(SpriteTest, XY)
277279
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
278280
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
279281
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
282+
EXPECT_CALL(handler, onMoved);
280283
EXPECT_CALL(handler, onXChanged);
281284
sprite.setX(400);
282285
ASSERT_EQ(sprite.x(), 344);
283286

284287
EXPECT_CALL(engine, spriteFencingEnabled()).WillOnce(Return(false));
288+
EXPECT_CALL(handler, onMoved);
285289
EXPECT_CALL(handler, onXChanged);
286290
sprite.setX(400);
287291
ASSERT_EQ(sprite.x(), 400);
@@ -290,11 +294,13 @@ TEST(SpriteTest, XY)
290294
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
291295
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
292296
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
297+
EXPECT_CALL(handler, onMoved);
293298
EXPECT_CALL(handler, onXChanged);
294299
sprite.setX(-400);
295300
ASSERT_EQ(sprite.x(), 155);
296301

297302
EXPECT_CALL(engine, spriteFencingEnabled()).WillOnce(Return(false));
303+
EXPECT_CALL(handler, onMoved);
298304
EXPECT_CALL(handler, onXChanged);
299305
sprite.setX(-400);
300306
ASSERT_EQ(sprite.x(), -400);
@@ -303,6 +309,7 @@ TEST(SpriteTest, XY)
303309
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
304310
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
305311
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
312+
EXPECT_CALL(handler, onMoved);
306313
EXPECT_CALL(handler, onYChanged);
307314
sprite.setY(150);
308315
ASSERT_EQ(sprite.y(), 150);
@@ -311,6 +318,7 @@ TEST(SpriteTest, XY)
311318
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
312319
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
313320
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
321+
EXPECT_CALL(handler, onMoved);
314322
EXPECT_CALL(handler, onYChanged);
315323
sprite.setY(-103);
316324
ASSERT_EQ(sprite.y(), -103);
@@ -319,11 +327,13 @@ TEST(SpriteTest, XY)
319327
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
320328
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
321329
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
330+
EXPECT_CALL(handler, onMoved);
322331
EXPECT_CALL(handler, onYChanged);
323332
sprite.setY(340);
324333
ASSERT_EQ(sprite.y(), 62);
325334

326335
EXPECT_CALL(engine, spriteFencingEnabled()).WillOnce(Return(false));
336+
EXPECT_CALL(handler, onMoved);
327337
EXPECT_CALL(handler, onYChanged);
328338
sprite.setY(340);
329339
ASSERT_EQ(sprite.y(), 340);
@@ -332,16 +342,19 @@ TEST(SpriteTest, XY)
332342
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
333343
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
334344
EXPECT_CALL(handler, boundingRect()).WillOnce(Return(rect));
345+
EXPECT_CALL(handler, onMoved);
335346
EXPECT_CALL(handler, onYChanged);
336347
sprite.setY(-340);
337348
ASSERT_EQ(sprite.y(), 86);
338349

339350
EXPECT_CALL(engine, spriteFencingEnabled()).WillOnce(Return(false));
351+
EXPECT_CALL(handler, onMoved);
340352
EXPECT_CALL(handler, onYChanged);
341353
sprite.setY(-340);
342354
ASSERT_EQ(sprite.y(), -340);
343355

344356
EXPECT_CALL(engine, spriteFencingEnabled()).WillOnce(Return(false));
357+
EXPECT_CALL(handler, onMoved);
345358
EXPECT_CALL(handler, onXChanged);
346359
EXPECT_CALL(handler, onYChanged);
347360
sprite.setPosition(56, -23);
@@ -532,6 +545,7 @@ TEST(SpriteTest, KeepInFence)
532545

533546
EXPECT_CALL(engine, requestRedraw()).Times(2);
534547
EXPECT_CALL(engine, spriteFencingEnabled()).Times(2).WillRepeatedly(Return(false));
548+
EXPECT_CALL(handler, onMoved).Times(2);
535549
EXPECT_CALL(handler, onXChanged);
536550
EXPECT_CALL(handler, onYChanged);
537551
sprite.setX(100);

test/target_interfaces/ispritehandler_test.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ TEST_F(ISpriteHandlerTest, Visible)
6363

6464
TEST_F(ISpriteHandlerTest, X)
6565
{
66+
EXPECT_CALL(m_handler, onMoved(0, 0, 189.46, 0));
6667
EXPECT_CALL(m_handler, onXChanged(189.46)).Times(1);
6768
EXPECT_CALL(m_handler, boundingRect()).WillOnce(Return(Rect()));
6869
EXPECT_CALL(m_engine, spriteFencingEnabled()).WillOnce(Return(true));
@@ -71,6 +72,7 @@ TEST_F(ISpriteHandlerTest, X)
7172
EXPECT_CALL(m_engine, requestRedraw());
7273
m_sprite.setX(189.46);
7374

75+
EXPECT_CALL(m_handler, onMoved(189.46, 0, 284.61, 0));
7476
EXPECT_CALL(m_handler, onXChanged(284.61)).Times(1);
7577
EXPECT_CALL(m_engine, spriteFencingEnabled()).WillOnce(Return(false));
7678
EXPECT_CALL(m_engine, requestRedraw());
@@ -79,6 +81,7 @@ TEST_F(ISpriteHandlerTest, X)
7981

8082
TEST_F(ISpriteHandlerTest, Y)
8183
{
84+
EXPECT_CALL(m_handler, onMoved(0, 0, 0, -153.7)).Times(1);
8285
EXPECT_CALL(m_handler, onYChanged(-153.7)).Times(1);
8386
EXPECT_CALL(m_handler, boundingRect()).WillOnce(Return(Rect()));
8487
EXPECT_CALL(m_engine, spriteFencingEnabled()).WillOnce(Return(true));
@@ -87,6 +90,7 @@ TEST_F(ISpriteHandlerTest, Y)
8790
EXPECT_CALL(m_engine, requestRedraw());
8891
m_sprite.setY(-153.7);
8992

93+
EXPECT_CALL(m_handler, onMoved(0, -153.7, 0, 207.08)).Times(1);
9094
EXPECT_CALL(m_handler, onYChanged(207.08)).Times(1);
9195
EXPECT_CALL(m_engine, spriteFencingEnabled()).WillOnce(Return(false));
9296
EXPECT_CALL(m_engine, requestRedraw());
@@ -95,11 +99,19 @@ TEST_F(ISpriteHandlerTest, Y)
9599

96100
TEST_F(ISpriteHandlerTest, Position)
97101
{
102+
EXPECT_CALL(m_handler, onMoved(0, 0, 284.61, 207.08)).Times(1);
98103
EXPECT_CALL(m_handler, onXChanged(284.61));
99104
EXPECT_CALL(m_handler, onYChanged(207.08));
100105
EXPECT_CALL(m_engine, spriteFencingEnabled()).WillOnce(Return(false));
101106
EXPECT_CALL(m_engine, requestRedraw());
102107
m_sprite.setPosition(284.61, 207.08);
108+
109+
EXPECT_CALL(m_handler, onMoved(284.61, 207.08, -45.9, -20.05)).Times(1);
110+
EXPECT_CALL(m_handler, onXChanged(-45.9));
111+
EXPECT_CALL(m_handler, onYChanged(-20.05));
112+
EXPECT_CALL(m_engine, spriteFencingEnabled()).WillOnce(Return(false));
113+
EXPECT_CALL(m_engine, requestRedraw());
114+
m_sprite.setPosition(-45.9, -20.05);
103115
}
104116

105117
TEST_F(ISpriteHandlerTest, Size)

0 commit comments

Comments
 (0)