Skip to content

Commit 5ce128e

Browse files
committed
Store mouse pointer position in Engine
1 parent cbe32cc commit 5ce128e

File tree

5 files changed

+64
-0
lines changed

5 files changed

+64
-0
lines changed

include/scratchcpp/iengine.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ class LIBSCRATCHCPP_EXPORT IEngine
9191
/*! Sets the framerate of the project. */
9292
virtual void setFps(double fps) = 0;
9393

94+
/*! Returns the X coordinate of the mouse pointer. */
95+
virtual double mouseX() const = 0;
96+
97+
/*! Sets the X coordinate of the mouse pointer. */
98+
virtual void setMouseX(double x) = 0;
99+
100+
/*! Returns the Y coordinate of the mouse pointer. */
101+
virtual double mouseY() const = 0;
102+
103+
/*! Sets the Y coordinate of the mouse pointer. */
104+
virtual void setMouseY(double y) = 0;
105+
94106
/*! Returns true if there are any running script of the broadcast with the given index. */
95107
virtual bool broadcastRunning(unsigned int index, VirtualMachine *sourceScript) = 0;
96108

src/engine/internal/engine.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,26 @@ void Engine::setFps(double fps)
364364
updateFrameDuration();
365365
}
366366

367+
double Engine::mouseX() const
368+
{
369+
return m_mouseX;
370+
}
371+
372+
void Engine::setMouseX(double x)
373+
{
374+
m_mouseX = x;
375+
}
376+
377+
double Engine::mouseY() const
378+
{
379+
return m_mouseY;
380+
}
381+
382+
void Engine::setMouseY(double y)
383+
{
384+
m_mouseY = y;
385+
}
386+
367387
bool Engine::broadcastRunning(unsigned int index, VirtualMachine *sourceScript)
368388
{
369389
const auto &scripts = m_runningBroadcastMap[index];

src/engine/internal/engine.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ class Engine : public IEngine
3939
double fps() const override;
4040
void setFps(double fps) override;
4141

42+
double mouseX() const override;
43+
void setMouseX(double x) override;
44+
45+
double mouseY() const override;
46+
void setMouseY(double y) override;
47+
4248
bool broadcastRunning(unsigned int index, VirtualMachine *sourceScript) override;
4349

4450
void breakFrame() override;
@@ -114,6 +120,8 @@ class Engine : public IEngine
114120
ITimer *m_timer = nullptr;
115121
double m_fps = 30; // default FPS
116122
std::chrono::milliseconds m_frameDuration; // will be computed in run()
123+
double m_mouseX = 0;
124+
double m_mouseY = 0;
117125

118126
bool m_running = false;
119127
bool m_breakFrame = false;

test/engine/engine_test.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,24 @@ TEST(EngineTest, Fps)
4343
ASSERT_EQ(engine.fps(), 60.25);
4444
}
4545

46+
TEST(EngineTest, MouseX)
47+
{
48+
Engine engine;
49+
ASSERT_EQ(engine.mouseX(), 0);
50+
51+
engine.setMouseX(-128.038);
52+
ASSERT_EQ(engine.mouseX(), -128.038);
53+
}
54+
55+
TEST(EngineTest, MouseY)
56+
{
57+
Engine engine;
58+
ASSERT_EQ(engine.mouseY(), 0);
59+
60+
engine.setMouseY(179.9258);
61+
ASSERT_EQ(engine.mouseY(), 179.9258);
62+
}
63+
4664
TEST(EngineTest, BreakFrame)
4765
{
4866
Engine engine;

test/mocks/enginemock.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ class EngineMock : public IEngine
2727
MOCK_METHOD(double, fps, (), (const, override));
2828
MOCK_METHOD(void, setFps, (double fps), (override));
2929

30+
MOCK_METHOD(double, mouseX, (), (const, override));
31+
MOCK_METHOD(void, setMouseX, (double x), (override));
32+
33+
MOCK_METHOD(double, mouseY, (), (const, override));
34+
MOCK_METHOD(void, setMouseY, (double y), (override));
35+
3036
MOCK_METHOD(bool, broadcastRunning, (unsigned int, VirtualMachine *), (override));
3137

3238
MOCK_METHOD(void, breakFrame, (), (override));

0 commit comments

Comments
 (0)