Skip to content

Commit 23b3d57

Browse files
committed
Add setAnyKeyPressed method to IEngine
1 parent dbd5a53 commit 23b3d57

File tree

5 files changed

+31
-0
lines changed

5 files changed

+31
-0
lines changed

include/scratchcpp/iengine.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ class LIBSCRATCHCPP_EXPORT IEngine
104104
/*! Sets the state of the given key. */
105105
virtual void setKeyState(const std::string &name, bool pressed) = 0;
106106

107+
/*! Sets whether any key is pressed (use this for any key, even for unsupported keys). */
108+
virtual void setAnyKeyPressed(bool pressed) = 0;
109+
107110
/*! Returns the X coordinate of the mouse pointer. */
108111
virtual double mouseX() const = 0;
109112

src/engine/internal/engine.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,9 @@ void Engine::setFps(double fps)
382382
bool Engine::keyPressed(const std::string &name) const
383383
{
384384
if (name == "any") {
385+
if (m_anyKeyPressed)
386+
return true;
387+
385388
for (const auto &[key, value] : m_keyMap) {
386389
if (value)
387390
return true;
@@ -405,6 +408,11 @@ void Engine::setKeyState(const std::string &name, bool pressed)
405408
m_keyMap[event.name()] = pressed;
406409
}
407410

411+
void Engine::setAnyKeyPressed(bool pressed)
412+
{
413+
m_anyKeyPressed = pressed;
414+
}
415+
408416
double Engine::mouseX() const
409417
{
410418
return m_mouseX;

src/engine/internal/engine.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class Engine : public IEngine
4444

4545
bool keyPressed(const std::string &name) const override;
4646
void setKeyState(const std::string &name, bool pressed) override;
47+
void setAnyKeyPressed(bool pressed) override;
4748

4849
double mouseX() const override;
4950
void setMouseX(double x) override;
@@ -137,6 +138,7 @@ class Engine : public IEngine
137138
double m_fps = 30; // default FPS
138139
std::chrono::milliseconds m_frameDuration; // will be computed in run()
139140
std::unordered_map<std::string, bool> m_keyMap; // holds key states
141+
bool m_anyKeyPressed = false;
140142
double m_mouseX = 0;
141143
double m_mouseY = 0;
142144
unsigned int m_stageWidth = 480;

test/engine/engine_test.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,23 @@ TEST(EngineTest, KeyState)
123123
ASSERT_TRUE(engine.keyPressed("32"));
124124
ASSERT_TRUE(engine.keyPressed("space"));
125125
ASSERT_TRUE(engine.keyPressed("any"));
126+
127+
engine.setAnyKeyPressed(true);
128+
ASSERT_TRUE(engine.keyPressed("any"));
129+
130+
engine.setAnyKeyPressed(false);
131+
ASSERT_TRUE(engine.keyPressed("any"));
132+
133+
engine.setKeyState("space", false);
134+
engine.setKeyState("a", false);
135+
engine.setKeyState("b", false);
136+
ASSERT_FALSE(engine.keyPressed("any"));
137+
138+
engine.setAnyKeyPressed(true);
139+
ASSERT_TRUE(engine.keyPressed("any"));
140+
141+
engine.setAnyKeyPressed(false);
142+
ASSERT_FALSE(engine.keyPressed("any"));
126143
}
127144

128145
TEST(EngineTest, MouseX)

test/mocks/enginemock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class EngineMock : public IEngine
3232

3333
MOCK_METHOD(bool, keyPressed, (const std::string &), (const, override));
3434
MOCK_METHOD(void, setKeyState, (const std::string &, bool), (override));
35+
MOCK_METHOD(void, setAnyKeyPressed, (bool), (override));
3536

3637
MOCK_METHOD(double, mouseX, (), (const, override));
3738
MOCK_METHOD(void, setMouseX, (double x), (override));

0 commit comments

Comments
 (0)