aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api/LoopTimer.h
diff options
context:
space:
mode:
authorWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-11-11 20:21:31 +0100
committerWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-11-11 20:21:31 +0100
commit149b3b5dbc8b18a142bf35869e54ab05e8f26d54 (patch)
tree11169ff5d0a5ca52ed1e6976b2c43c8e19f8f741 /src/crepe/api/LoopTimer.h
parentec7a4af3e1cc0ebfe2c6df21f15575a1b1abbd6c (diff)
added chrono::duration
Diffstat (limited to 'src/crepe/api/LoopTimer.h')
-rw-r--r--src/crepe/api/LoopTimer.h105
1 files changed, 53 insertions, 52 deletions
diff --git a/src/crepe/api/LoopTimer.h b/src/crepe/api/LoopTimer.h
index 5309d2f..ec48e4a 100644
--- a/src/crepe/api/LoopTimer.h
+++ b/src/crepe/api/LoopTimer.h
@@ -1,144 +1,145 @@
-#pragma once
+ #pragma once
#include <cstdint>
+#include <chrono>
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.
+ * \return Delta time in seconds 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.
* It is the cumulative sum of each frame's delta time.
*
- * \return Elapsed game time in milliseconds.
+ * \return Elapsed game time in seconds.
*/
- 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,
* such as physics calculations.
*
- * \return Fixed delta time in milliseconds.
+ * \return Fixed delta time in seconds.
*/
- 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
* actual frame time, useful for managing fixed update intervals.
*
- * \return Accumulated lag in milliseconds.
+ * \return Accumulated lag in seconds.
*/
- 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 seconds to avoid large jumps
+ std::chrono::duration<double> maximum_delta_time{0.25};
+ //! Delta time for the current frame in seconds
+ std::chrono::duration<double> delta_time{0.0};
+ //! Target time per frame in seconds
+ std::chrono::duration<double> frame_target_time = std::chrono::seconds(1) / fps;
+ //! Fixed delta time for fixed updates in seconds
+ std::chrono::duration<double> fixed_delta_time = std::chrono::seconds(1) / 50;
+ //! Total elapsed game time in seconds
+ std::chrono::duration<double> elapsed_time{0.0};
+ //! Total elapsed time for fixed updates in seconds
+ std::chrono::duration<double> elapsed_fixed_time{0.0};
+ //! Time of the last frame
+ std::chrono::steady_clock::time_point last_frame_time;
};
} // namespace crepe