Skip to content

Commit 6d7830e

Browse files
authored
Merge pull request #325 from scratchcpp/turbo_mode
Implement turbo mode
2 parents 0b7abff + b929b26 commit 6d7830e

File tree

5 files changed

+43
-3
lines changed

5 files changed

+43
-3
lines changed

include/scratchcpp/iengine.h

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

102+
/*! Returns true if turbo mode is enabled. */
103+
virtual bool turboModeEnabled() const = 0;
104+
105+
/*! Sets whether turbo mode is enabled. */
106+
virtual void setTurboModeEnabled(bool turboMode) = 0;
107+
102108
/*! Returns true if the given key is pressed. */
103109
virtual bool keyPressed(const std::string &name) const = 0;
104110

src/engine/internal/engine.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ void Engine::eventLoop(bool untilProjectStops)
368368
elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - frameStart);
369369
sleepTime = m_frameDuration - elapsedTime;
370370
timeout = sleepTime <= std::chrono::milliseconds::zero();
371-
} while (!m_redrawRequested && !timeout && !stop);
371+
} while (!((m_redrawRequested && !m_turboModeEnabled) || timeout || stop));
372372

373373
if (stop)
374374
break;
@@ -477,6 +477,16 @@ void Engine::setFps(double fps)
477477
updateFrameDuration();
478478
}
479479

480+
bool Engine::turboModeEnabled() const
481+
{
482+
return m_turboModeEnabled;
483+
}
484+
485+
void Engine::setTurboModeEnabled(bool turboMode)
486+
{
487+
m_turboModeEnabled = turboMode;
488+
}
489+
480490
bool Engine::keyPressed(const std::string &name) const
481491
{
482492
if (name == "any") {

src/engine/internal/engine.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class Engine : public IEngine
4545
double fps() const override;
4646
void setFps(double fps) override;
4747

48+
bool turboModeEnabled() const override;
49+
void setTurboModeEnabled(bool turboMode) override;
50+
4851
bool keyPressed(const std::string &name) const override;
4952
void setKeyState(const std::string &name, bool pressed) override;
5053
void setAnyKeyPressed(bool pressed) override;
@@ -161,8 +164,9 @@ class Engine : public IEngine
161164

162165
std::unique_ptr<ITimer> m_defaultTimer;
163166
ITimer *m_timer = nullptr;
164-
double m_fps = 30; // default FPS
165-
std::chrono::milliseconds m_frameDuration; // will be computed in eventLoop()
167+
double m_fps = 30; // default FPS
168+
std::chrono::milliseconds m_frameDuration; // will be computed in eventLoop()
169+
bool m_turboModeEnabled = false;
166170
std::unordered_map<std::string, bool> m_keyMap; // holds key states
167171
bool m_anyKeyPressed = false;
168172
double m_mouseX = 0;

test/engine/engine_test.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,23 @@ TEST(EngineTest, FpsProject)
114114
EXPECT_CALL(clock, sleep(std::chrono::milliseconds(100)));
115115
EXPECT_CALL(clock, sleep(std::chrono::milliseconds(15)));
116116
p.run();
117+
118+
engine->setTurboModeEnabled(true);
119+
EXPECT_CALL(clock, currentSteadyTime()).WillOnce(Return(time5)).WillOnce(Return(time5)).WillOnce(Return(time6)).WillOnce(Return(time6)).WillOnce(Return(time7)).WillOnce(Return(time8));
120+
EXPECT_CALL(clock, sleep).Times(0);
121+
p.run();
122+
}
123+
124+
TEST(EngineTest, TurboModeEnabled)
125+
{
126+
Engine engine;
127+
ASSERT_FALSE(engine.turboModeEnabled());
128+
129+
engine.setTurboModeEnabled(true);
130+
ASSERT_TRUE(engine.turboModeEnabled());
131+
132+
engine.setTurboModeEnabled(false);
133+
ASSERT_FALSE(engine.turboModeEnabled());
117134
}
118135

119136
TEST(EngineTest, ExecutionOrder)

test/mocks/enginemock.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ class EngineMock : public IEngine
3131
MOCK_METHOD(double, fps, (), (const, override));
3232
MOCK_METHOD(void, setFps, (double fps), (override));
3333

34+
MOCK_METHOD(bool, turboModeEnabled, (), (const, override));
35+
MOCK_METHOD(void, setTurboModeEnabled, (bool), (override));
36+
3437
MOCK_METHOD(bool, keyPressed, (const std::string &), (const, override));
3538
MOCK_METHOD(void, setKeyState, (const std::string &, bool), (override));
3639
MOCK_METHOD(void, setAnyKeyPressed, (bool), (override));

0 commit comments

Comments
 (0)