aboutsummaryrefslogtreecommitdiff
path: root/src/crepe
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe')
-rw-r--r--src/crepe/api/LoopManager.cpp72
-rw-r--r--src/crepe/api/LoopManager.h9
-rw-r--r--src/crepe/api/LoopTimer.cpp68
-rw-r--r--src/crepe/api/LoopTimer.h94
-rw-r--r--src/crepe/facade/SDLContext.cpp4
-rw-r--r--src/crepe/facade/SDLContext.h1
6 files changed, 125 insertions, 123 deletions
diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp
index d4345d0..b4382a6 100644
--- a/src/crepe/api/LoopManager.cpp
+++ b/src/crepe/api/LoopManager.cpp
@@ -1,66 +1,62 @@
+#include "../facade/SDLContext.h"
#include "../system/RenderSystem.h"
#include "../system/ScriptSystem.h"
-#include "../facade/SDLContext.h"
#include "LoopManager.h"
#include "LoopTimer.h"
using namespace crepe;
-LoopManager::LoopManager(const RenderSystem& renderSystem, const SDLContext& sdlContext,
- const LoopTimer& loopTimer, const ScriptSystem& scriptSystem,
- const SoundSystem& soundSystem, const ParticleSystem& particleSystem,
- const PhysicsSystem& physicsSystem, const AnimatorSystem& animatorSystem,
- const CollisionSystem& collisionSystem) {
- // Initialize systems if needed
- // Example: this->renderSystem = renderSystem;
+LoopManager::LoopManager(
+ const RenderSystem & renderSystem, const SDLContext & sdlContext,
+ const LoopTimer & loopTimer, const ScriptSystem & scriptSystem,
+ const SoundSystem & soundSystem, const ParticleSystem & particleSystem,
+ const PhysicsSystem & physicsSystem, const AnimatorSystem & animatorSystem,
+ const CollisionSystem & collisionSystem) {
+ // Initialize systems if needed
+ // Example: this->renderSystem = renderSystem;
}
void LoopManager::process_input() {
- SDLContext::get_instance().handle_events(this->game_running);
+ SDLContext::get_instance().handle_events(this->game_running);
}
-void LoopManager::start(){
- this->setup();
- this->loop();
+void LoopManager::start() {
+ this->setup();
+ this->loop();
}
void LoopManager::set_running(bool running) { this->game_running = running; }
-void LoopManager::fixed_update() {
-}
+void LoopManager::fixed_update() {}
void LoopManager::loop() {
- LoopTimer & timer = LoopTimer::get_instance();
- timer.start();
+ LoopTimer & timer = LoopTimer::get_instance();
+ timer.start();
- while (game_running) {
- timer.update();
+ while (game_running) {
+ timer.update();
- while (timer.get_lag() >= timer.get_fixed_delta_time()) {
- this->process_input();
- this->fixed_update();
- timer.advance_fixed_update();
- }
+ while (timer.get_lag() >= timer.get_fixed_delta_time()) {
+ this->process_input();
+ this->fixed_update();
+ timer.advance_fixed_update();
+ }
- this->update();
- this->render();
+ this->update();
+ this->render();
- timer.enforce_frame_rate();
- }
+ timer.enforce_frame_rate();
+ }
}
-
void LoopManager::setup() {
- this->game_running = true;
- LoopTimer::get_instance().start();
- LoopTimer::get_instance().set_fps(60);
+ this->game_running = true;
+ LoopTimer::get_instance().start();
+ LoopTimer::get_instance().set_fps(60);
}
void LoopManager::render() {
- if (this->game_running) {
- RenderSystem::get_instance().update();
- }
-}
-
-void LoopManager::update() {
- LoopTimer & timer = LoopTimer::get_instance();
+ if (this->game_running) {
+ RenderSystem::get_instance().update();
+ }
}
+void LoopManager::update() { LoopTimer & timer = LoopTimer::get_instance(); }
diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h
index 79abae6..5d8c91b 100644
--- a/src/crepe/api/LoopManager.h
+++ b/src/crepe/api/LoopManager.h
@@ -1,6 +1,5 @@
#pragma once
-
namespace crepe {
class RenderSystem;
@@ -16,9 +15,11 @@ class CollisionSystem;
class LoopManager {
public:
void start();
- LoopManager(const RenderSystem&, const SDLContext&, const LoopTimer&, const ScriptSystem&,
- const SoundSystem&, const ParticleSystem&, const PhysicsSystem&, const AnimatorSystem&,
- const CollisionSystem&);
+ LoopManager(const RenderSystem &, const SDLContext &, const LoopTimer &,
+ const ScriptSystem &, const SoundSystem &,
+ const ParticleSystem &, const PhysicsSystem &,
+ const AnimatorSystem &, const CollisionSystem &);
+
private:
/**
* \brief Setup function for one-time initialization.
diff --git a/src/crepe/api/LoopTimer.cpp b/src/crepe/api/LoopTimer.cpp
index dd4d7e5..f68d75a 100644
--- a/src/crepe/api/LoopTimer.cpp
+++ b/src/crepe/api/LoopTimer.cpp
@@ -1,45 +1,48 @@
+#include "LoopTimer.h"
#include "../facade/SDLContext.h"
#include "../util/log.h"
-#include "LoopTimer.h"
using namespace crepe;
-LoopTimer::LoopTimer() {
- dbg_trace();
-}
+LoopTimer::LoopTimer() { dbg_trace(); }
-LoopTimer& LoopTimer::get_instance() {
- static LoopTimer instance;
- return instance;
+LoopTimer & LoopTimer::get_instance() {
+ static LoopTimer instance;
+ return instance;
}
void LoopTimer::start() {
- this->last_frame_time = SDLContext::get_instance().get_ticks();
- this->elapsed_time = 0;
- this->elapsed_fixed_time = 0;
- this->delta_time = 0;
+ this->last_frame_time = SDLContext::get_instance().get_ticks();
+ this->elapsed_time = 0;
+ this->elapsed_fixed_time = 0;
+ this->delta_time = 0;
}
void LoopTimer::update() {
- uint64_t current_frame_time = SDLContext::get_instance().get_ticks();
- this->delta_time = (current_frame_time - last_frame_time);
+ uint64_t current_frame_time = SDLContext::get_instance().get_ticks();
+ this->delta_time = (current_frame_time - last_frame_time);
- if (this->delta_time > this->maximum_delta_time) {
- this->delta_time = this->maximum_delta_time;
- }
- this->delta_time *= this->game_scale;
- this->elapsed_time += this->delta_time;
- this->last_frame_time = current_frame_time;
+ if (this->delta_time > this->maximum_delta_time) {
+ this->delta_time = this->maximum_delta_time;
+ }
+ this->delta_time *= this->game_scale;
+ this->elapsed_time += this->delta_time;
+ this->last_frame_time = current_frame_time;
}
double LoopTimer::get_delta_time() const { return this->delta_time; }
double LoopTimer::get_current_time() const { return this->elapsed_time; }
-void LoopTimer::advance_fixed_update() { this->elapsed_fixed_time += this->fixed_delta_time; }
-double LoopTimer::get_fixed_delta_time() const { return this->fixed_delta_time; }
+void LoopTimer::advance_fixed_update() {
+ this->elapsed_fixed_time += this->fixed_delta_time;
+}
+double LoopTimer::get_fixed_delta_time() const {
+ return this->fixed_delta_time;
+}
void LoopTimer::set_fps(int fps) {
- this->fps = fps;
- this->frame_target_time = 1000.0 / this->fps;
+ this->fps = fps;
+ //! use fps to calculate frame_target_time in ms
+ this->frame_target_time = 1000.0 / this->fps;
}
int LoopTimer::get_fps() const { return this->fps; }
@@ -47,15 +50,18 @@ void LoopTimer::set_game_scale(double value) { this->game_scale = value; }
double LoopTimer::get_game_scale() const { return this->game_scale; }
void LoopTimer::enforce_frame_rate() {
- uint64_t current_frame_time = SDLContext::get_instance().get_ticks();
- double frame_duration = (current_frame_time - this->last_frame_time);
+ uint64_t current_frame_time = SDLContext::get_instance().get_ticks();
+ double frame_duration = (current_frame_time - this->last_frame_time);
- if (frame_duration < this->frame_target_time) {
- uint32_t delay_time = static_cast<uint32_t>(this->frame_target_time - frame_duration);
- SDLContext::get_instance().delay(delay_time);
- }
+ if (frame_duration < this->frame_target_time) {
+ uint32_t delay_time
+ = static_cast<uint32_t>(this->frame_target_time - frame_duration);
+ SDLContext::get_instance().delay(delay_time);
+ }
- this->last_frame_time = current_frame_time;
+ this->last_frame_time = current_frame_time;
}
-double LoopTimer::get_lag() const { return this->elapsed_time - this->elapsed_fixed_time; }
+double LoopTimer::get_lag() const {
+ return this->elapsed_time - this->elapsed_fixed_time;
+}
diff --git a/src/crepe/api/LoopTimer.h b/src/crepe/api/LoopTimer.h
index 5f9b6a7..5309d2f 100644
--- a/src/crepe/api/LoopTimer.h
+++ b/src/crepe/api/LoopTimer.h
@@ -6,21 +6,21 @@ namespace crepe {
class LoopTimer {
public:
- /**
+ /**
* \brief Get the singleton instance of LoopTimer.
*
* \return A reference to the LoopTimer instance.
*/
- static LoopTimer& get_instance();
+ static LoopTimer & get_instance();
- /**
+ /**
* \brief Get the current delta time for the current frame.
*
* \return Delta time in milliseconds since the last frame.
*/
- double get_delta_time() const;
+ double get_delta_time() const;
- /**
+ /**
* \brief Get the current game time.
*
* \note The current game time may vary from real-world elapsed time.
@@ -28,55 +28,55 @@ public:
*
* \return Elapsed game time in milliseconds.
*/
- double get_current_time() const;
+ double get_current_time() const;
- /**
+ /**
* \brief Set the target frames per second (FPS).
*
* \param fps The desired frames rendered per second.
*/
- void set_fps(int fps);
+ void set_fps(int fps);
- /**
+ /**
* \brief Get the current frames per second (FPS).
*
* \return Current FPS.
*/
- int get_fps() const;
+ int get_fps() const;
- /**
+ /**
* \brief Get the current game scale.
*
* \return The current game scale, where 0 = paused, 1 = normal speed, and values > 1 speed up the game.
*/
- double get_game_scale() const;
+ double get_game_scale() const;
- /**
+ /**
* \brief Set the game scale.
*
* \param game_scale The desired game scale (0 = pause, 1 = normal speed, > 1 = speed up).
*/
- void set_game_scale(double game_scale);
+ void set_game_scale(double game_scale);
private:
- friend class LoopManager;
+ friend class LoopManager;
- /**
+ /**
* \brief Start the loop timer.
*
* Initializes the timer to begin tracking frame times.
*/
- void start();
+ void start();
- /**
+ /**
* \brief Enforce the frame rate limit.
*
* Ensures that the game loop does not exceed the target FPS by delaying
* frame updates as necessary.
*/
- void enforce_frame_rate();
+ void enforce_frame_rate();
- /**
+ /**
* \brief Get the fixed delta time for consistent updates.
*
* Fixed delta time is used for operations that require uniform time steps,
@@ -84,9 +84,9 @@ private:
*
* \return Fixed delta time in milliseconds.
*/
- double get_fixed_delta_time() const;
+ double get_fixed_delta_time() const;
- /**
+ /**
* \brief Get the accumulated lag in the game loop.
*
* Lag represents the difference between the target frame time and the
@@ -94,51 +94,51 @@ private:
*
* \return Accumulated lag in milliseconds.
*/
- double get_lag() const;
+ double get_lag() const;
- /**
+ /**
* \brief Construct a new LoopTimer object.
*
* Private constructor for singleton pattern to restrict instantiation
* outside the class.
*/
- LoopTimer();
+ LoopTimer();
- /**
+ /**
* \brief Update the timer to the current frame.
*
* Calculates and updates the delta time for the current frame and adds it to
* the cumulative game time.
*/
- void update();
+ void update();
- /**
+ /**
* \brief Advance the game loop by a fixed update interval.
*
* This method progresses the game state by a consistent, fixed time step,
* allowing for stable updates independent of frame rate fluctuations.
*/
- void advance_fixed_update();
+ void advance_fixed_update();
private:
- //! Current frames per second
- int fps = 50;
- //! Current game scale
- double game_scale = 1;
- //! Maximum delta time in milliseconds to avoid large jumps
- double maximum_delta_time = 250;
- //! Delta time for the current frame in milliseconds
- double delta_time = 0;
- //! Target time per frame in milliseconds
- double frame_target_time = 1000.0 / fps;
- //! Fixed delta time for fixed updates in milliseconds
- double fixed_delta_time = 20;
- //! Total elapsed game time in milliseconds
- double elapsed_time = 0;
- //! Total elapsed time for fixed updates in milliseconds
- double elapsed_fixed_time = 0;
- //! Time of the last frame in milliseconds
- uint64_t last_frame_time = 0;
+ //! Current frames per second
+ int fps = 50;
+ //! Current game scale
+ double game_scale = 1;
+ //! Maximum delta time in milliseconds to avoid large jumps
+ double maximum_delta_time = 250;
+ //! Delta time for the current frame in milliseconds
+ double delta_time = 0;
+ //! Target time per frame in milliseconds
+ double frame_target_time = 1000.0 / fps;
+ //! Fixed delta time for fixed updates in milliseconds
+ double fixed_delta_time = 20;
+ //! Total elapsed game time in milliseconds
+ double elapsed_time = 0;
+ //! Total elapsed time for fixed updates in milliseconds
+ double elapsed_fixed_time = 0;
+ //! Time of the last frame in milliseconds
+ uint64_t last_frame_time = 0;
};
} // namespace crepe
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 17ced0c..39d0d4d 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -191,6 +191,4 @@ int SDLContext::get_height(const Texture & ctx) const {
SDL_QueryTexture(ctx.texture.get(), NULL, NULL, NULL, &h);
return h;
}
-void SDLContext::delay(int ms) const{
- SDL_Delay(ms);
-}
+void SDLContext::delay(int ms) const { SDL_Delay(ms); }
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index 6c57ef9..90147e0 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -74,6 +74,7 @@ private:
* \param ms Duration of the delay in milliseconds.
*/
void delay(int ms) const;
+
private:
/**
* \brief Constructs an SDLContext instance.