Ember
A C++ 20 'game engine' built with SDL3 with wide platform support.
time_manager.h
Go to the documentation of this file.
1 #pragma once
2 #include "logging_sys.h"
3 
11 class TimeManager {
12 public:
13  TimeManager();
14 
15  float get_delta_time() const;
16  float get_raw_delta_time() const;
17  float get_scaled_delta_time() const;
18  Uint64 get_frame_count() const;
19  float get_elapsed_time() const;
20  float get_total_time() const;
21 
22  float get_fps() const;
23  float get_average_fps() const;
24  Uint32 get_target_fps() const;
25 
26  void set_target_fps(Uint32 fps = 60);
27 
28  float get_time_scale() const;
29  void set_time_scale(float scale);
30 
31  bool is_paused() const;
32  void pause();
33  void resume();
34  void toggle_pause();
35 
36  void limit_frame_rate();
37  void update();
38  void reset();
39  void print_debug_info() const;
40 
41  void set_max_delta_time(float max_dt);
42  float get_max_delta_time() const;
43 
44 private:
45  void update_fps_calculation();
46 
47  // Core timing
48  Uint64 _frequency;
49  Uint64 _last_tick;
50  Uint64 _current_tick = 0;
51  Uint64 _startup_time;
52 
53  float _delta_time = 0.0f;
54  float _raw_delta_time = 0.0f;
55  float _elapsed_time = 0.0f;
56 
57  // Frame management
58  Uint64 _frame_count = 0;
59  Uint32 _target_fps = 60;
60  float _target_frame_time = 1.0f / 60.0f;
61  float _max_delta_time = 1.0f / 15.0f; // Prevent spiral of death (max 15 FPS)
62 
63  // Time scaling
64  float _time_scale = 1.0f;
65 
66  // Pause management
67  bool _is_paused = false;
68  Uint64 _pause_start_tick = 0;
69 
70  // FPS calculation
71  float _fps = 0.0f;
72  float _average_fps = 0.0f;
73  std::deque<float> _fps_samples;
74  static constexpr size_t _fps_sample_count = 60;
75  size_t _fps_sample_index = 0;
76 };
TimeManager class.
Definition: time_manager.h:11
float get_scaled_delta_time() const
Definition: time_manager.cpp:18
void set_time_scale(float scale)
Definition: time_manager.cpp:61
float get_elapsed_time() const
Definition: time_manager.cpp:26
float get_average_fps() const
Definition: time_manager.cpp:38
void set_max_delta_time(float max_dt)
Definition: time_manager.cpp:154
float get_total_time() const
Definition: time_manager.cpp:30
float get_delta_time() const
Definition: time_manager.cpp:10
void limit_frame_rate()
Definition: time_manager.cpp:89
float get_time_scale() const
Definition: time_manager.cpp:57
void pause()
Definition: time_manager.cpp:69
void resume()
Definition: time_manager.cpp:76
bool is_paused() const
Definition: time_manager.cpp:65
void update()
Definition: time_manager.cpp:111
Uint64 get_frame_count() const
Definition: time_manager.cpp:22
float get_max_delta_time() const
Definition: time_manager.cpp:158
void print_debug_info() const
Definition: time_manager.cpp:143
TimeManager()
Definition: time_manager.cpp:3
void reset()
Definition: time_manager.cpp:128
Uint32 get_target_fps() const
Definition: time_manager.cpp:42
float get_raw_delta_time() const
Definition: time_manager.cpp:14
void set_target_fps(Uint32 fps=60)
Definition: time_manager.cpp:46
float get_fps() const
Definition: time_manager.cpp:34
void toggle_pause()
Definition: time_manager.cpp:85