diff options
| -rw-r--r-- | mwe/events/include/event.h | 2 | ||||
| -rw-r--r-- | src/crepe/api/LoopManager.cpp | 72 | ||||
| -rw-r--r-- | src/crepe/api/LoopManager.h | 9 | ||||
| -rw-r--r-- | src/crepe/api/LoopTimer.cpp | 68 | ||||
| -rw-r--r-- | src/crepe/api/LoopTimer.h | 94 | ||||
| -rw-r--r-- | src/crepe/facade/SDLContext.cpp | 4 | ||||
| -rw-r--r-- | src/crepe/facade/SDLContext.h | 1 | ||||
| -rw-r--r-- | src/example/gameloop.cpp | 2 | ||||
| -rw-r--r-- | src/makefile | 6 | 
9 files changed, 128 insertions, 130 deletions
| diff --git a/mwe/events/include/event.h b/mwe/events/include/event.h index 16c75bf..3e70201 100644 --- a/mwe/events/include/event.h +++ b/mwe/events/include/event.h @@ -152,7 +152,7 @@ private:  };  class ShutDownEvent : public Event {  public: -	ShutDownEvent() : Event("ShutDownEvent") {}; +	ShutDownEvent() : Event("ShutDownEvent"){};  	REGISTER_EVENT_TYPE(ShutDownEvent) 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. diff --git a/src/example/gameloop.cpp b/src/example/gameloop.cpp index 6cd0301..a676f20 100644 --- a/src/example/gameloop.cpp +++ b/src/example/gameloop.cpp @@ -1,6 +1,6 @@  #include "crepe/api/LoopManager.h"  using namespace crepe; -int main(){ +int main() {  	LoopManager gameloop;  	gameloop.start();  	return 1; diff --git a/src/makefile b/src/makefile index ce5a29f..a2c2961 100644 --- a/src/makefile +++ b/src/makefile @@ -94,11 +94,7 @@ LOEK += example/script.cpp  LOEK += test/audio.cpp  LOEK += test/dummy.cpp  JARO += test/PhysicsTest.cpp -WOUTER += crepe/api/LoopManager.h -WOUTER += crepe/api/LoopManager.cpp -WOUTER += crepe/api/LoopTimer.h -WOUTER += crepe/api/LoopTimer.cpp -FMT := $(WOUTER) #<<< CHANGE THIS TO YOUR NAME FOR STEP 2 +FMT := $(JARO) #<<< CHANGE THIS TO YOUR NAME FOR STEP 2  format: FORCE  	clang-tidy -p build/compile_commands.json --fix-errors $(FMT) |