2#include <SDL3/SDL_timer.h>
7 GameTimer::GameTimer() {
9 m_LastTime = SDL_GetPerformanceCounter();
13 auto minutes =
static_cast<int32_t
>(milliseconds / 60000);
14 auto seconds =
static_cast<int32_t
>((milliseconds - minutes * 60000) / 1000);
15 auto ms =
static_cast<int32_t
>(milliseconds) % 1000;
17 return std::format(
"{}:{:02}:{:03}", minutes, seconds, ms);
28 void GameTimer::Update() {
30 const uint64_t now = SDL_GetPerformanceCounter();
31 m_DeltaTime =
static_cast<double>(now - m_LastTime) / SDL_GetPerformanceFrequency();
34 m_Time += m_DeltaTime;
37 m_Accumulator += m_DeltaTime;
39 if (m_Timestep != 0) {
40 while (m_Accumulator >= m_Timestep) {
42 m_TickrateUpdateFunc(*
this);
44 m_Accumulator -= m_Timestep;
47 m_TickAlpha = m_Accumulator / m_Timestep;
50 static bool oneshot =
true;
54 m_ManualTickGate =
true;
61 m_ManualTickGate =
true;
64 if (m_ManualTickGate) {
65 m_Accumulator += m_DeltaTime;
67 if (m_Timestep != 0) {
68 while (m_Accumulator >= m_Timestep) {
70 m_TickrateUpdateFunc(*
this);
71 m_ManualTickGate =
false;
73 m_Accumulator -= m_Timestep;
76 m_TickAlpha = m_Accumulator / m_Timestep;
84 m_Tickrate = tickrate;
85 m_Timestep = 1.0f /
static_cast<float>(tickrate);
90 m_Start = SDL_GetPerformanceCounter();
94 const uint64_t end = SDL_GetPerformanceCounter();
95 return static_cast<double>(end - m_Start) * 1000.0f / SDL_GetPerformanceFrequency();
#define CORI_CORE_DEBUG_TAGGED(...)
#define CORI_CORE_INFO_TAGGED(...)
#define CORI_PROFILE_FUNCTION()
void SetTickrate(const uint16_t tickrate)
Changes the tickrate.
static std::string FormatTime_S_to_M_S_MS(const double seconds)
Formats seconds into a string with a format Min:Sec:Ms.
void SetManualTickStep(const bool state)
Enables or disables manual tick step.
static std::string FormatTime_MS_to_M_S_MS(const double milliseconds)
Formats milliseconds into a string with a format Min:Sec:Ms.
double End() const
Stops the manual timer.
void Start()
Start the manual timer.
Core systems of the engine are here.