Skip to content

Commit 0f54bd2

Browse files
authored
Merge pull request #472 from scratchcpp/mouse_wheel_api
Add mouse wheel API
2 parents 2b74f8b + a8082cf commit 0f54bd2

File tree

6 files changed

+85
-0
lines changed

6 files changed

+85
-0
lines changed

include/scratchcpp/iengine.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,12 @@ class LIBSCRATCHCPP_EXPORT IEngine
139139
/*! Sets whether any key is pressed (use this for any key, even for unsupported keys). */
140140
virtual void setAnyKeyPressed(bool pressed) = 0;
141141

142+
/*! Starts "when up arrow key pressed" hats. */
143+
virtual void mouseWheelUp() = 0;
144+
145+
/*! Starts "when down arrow key pressed" hats. */
146+
virtual void mouseWheelDown() = 0;
147+
142148
/*! Returns the X coordinate of the mouse pointer. */
143149
virtual double mouseX() const = 0;
144150

src/engine/internal/engine.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,18 @@ void Engine::setAnyKeyPressed(bool pressed)
654654
startHats(HatType::KeyPressed, { { HatField::KeyOption, "any" } }, nullptr);
655655
}
656656

657+
void Engine::mouseWheelUp()
658+
{
659+
// Start "when up arrow pressed" scripts
660+
startHats(HatType::KeyPressed, { { HatField::KeyOption, "up arrow" } }, nullptr);
661+
}
662+
663+
void Engine::mouseWheelDown()
664+
{
665+
// Start "when down arrow pressed" scripts
666+
startHats(HatType::KeyPressed, { { HatField::KeyOption, "down arrow" } }, nullptr);
667+
}
668+
657669
double Engine::mouseX() const
658670
{
659671
return m_mouseX;

src/engine/internal/engine.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class Engine : public IEngine
6464
void setKeyState(const KeyEvent &event, bool pressed) override;
6565
void setAnyKeyPressed(bool pressed) override;
6666

67+
void mouseWheelUp() override;
68+
void mouseWheelDown() override;
69+
6770
double mouseX() const override;
6871
void setMouseX(double x) override;
6972

test/engine/engine_test.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,67 @@ TEST(EngineTest, WhenKeyPressed)
706706
ASSERT_EQ(GET_VAR(stage, "4_pressed")->value().toInt(), 1);
707707
}
708708

709+
TEST(EngineTest, MouseWheel)
710+
{
711+
Project p("mouse_wheel.sb3");
712+
ASSERT_TRUE(p.load());
713+
714+
auto engine = p.engine();
715+
716+
Stage *stage = engine->stage();
717+
ASSERT_TRUE(stage);
718+
719+
// Initial state
720+
ASSERT_VAR(stage, "up");
721+
ASSERT_EQ(GET_VAR(stage, "up")->value().toInt(), 0);
722+
ASSERT_VAR(stage, "down");
723+
ASSERT_EQ(GET_VAR(stage, "down")->value().toInt(), 0);
724+
ASSERT_VAR(stage, "any");
725+
ASSERT_EQ(GET_VAR(stage, "any")->value().toInt(), 0);
726+
727+
// Up
728+
engine->mouseWheelUp();
729+
ASSERT_FALSE(engine->keyPressed("up arrow"));
730+
engine->step();
731+
ASSERT_VAR(stage, "up");
732+
ASSERT_EQ(GET_VAR(stage, "up")->value().toInt(), 1);
733+
ASSERT_VAR(stage, "down");
734+
ASSERT_EQ(GET_VAR(stage, "down")->value().toInt(), 0);
735+
ASSERT_VAR(stage, "any");
736+
ASSERT_EQ(GET_VAR(stage, "any")->value().toInt(), 0);
737+
738+
engine->mouseWheelUp();
739+
ASSERT_FALSE(engine->keyPressed("up arrow"));
740+
engine->step();
741+
ASSERT_VAR(stage, "up");
742+
ASSERT_EQ(GET_VAR(stage, "up")->value().toInt(), 2);
743+
ASSERT_VAR(stage, "down");
744+
ASSERT_EQ(GET_VAR(stage, "down")->value().toInt(), 0);
745+
ASSERT_VAR(stage, "any");
746+
ASSERT_EQ(GET_VAR(stage, "any")->value().toInt(), 0);
747+
748+
// Down
749+
engine->mouseWheelDown();
750+
ASSERT_FALSE(engine->keyPressed("down arrow"));
751+
engine->step();
752+
ASSERT_VAR(stage, "up");
753+
ASSERT_EQ(GET_VAR(stage, "up")->value().toInt(), 2);
754+
ASSERT_VAR(stage, "down");
755+
ASSERT_EQ(GET_VAR(stage, "down")->value().toInt(), 1);
756+
ASSERT_VAR(stage, "any");
757+
ASSERT_EQ(GET_VAR(stage, "any")->value().toInt(), 0);
758+
759+
engine->mouseWheelDown();
760+
ASSERT_FALSE(engine->keyPressed("down arrow"));
761+
engine->step();
762+
ASSERT_VAR(stage, "up");
763+
ASSERT_EQ(GET_VAR(stage, "up")->value().toInt(), 2);
764+
ASSERT_VAR(stage, "down");
765+
ASSERT_EQ(GET_VAR(stage, "down")->value().toInt(), 2);
766+
ASSERT_VAR(stage, "any");
767+
ASSERT_EQ(GET_VAR(stage, "any")->value().toInt(), 0);
768+
}
769+
709770
TEST(EngineTest, MouseX)
710771
{
711772
Engine engine;

test/mocks/enginemock.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ class EngineMock : public IEngine
4747
MOCK_METHOD(void, setKeyState, (const KeyEvent &, bool), (override));
4848
MOCK_METHOD(void, setAnyKeyPressed, (bool), (override));
4949

50+
MOCK_METHOD(void, mouseWheelUp, (), (override));
51+
MOCK_METHOD(void, mouseWheelDown, (), (override));
52+
5053
MOCK_METHOD(double, mouseX, (), (const, override));
5154
MOCK_METHOD(void, setMouseX, (double x), (override));
5255

test/mouse_wheel.sb3

1.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)