diff --git a/src/core/Time.cpp b/src/core/Time.cpp new file mode 100644 index 0000000..db7fe69 --- /dev/null +++ b/src/core/Time.cpp @@ -0,0 +1,46 @@ +#include "Time.h" + +Uint64 Time::s_lastCounter = 0; +Uint64 Time::s_freq = 0; +double Time::s_deltaTime = 0.0; + +int Time::s_frames = 0; +double Time::s_fps = 0.0; +double Time::s_fpsTimer = 0.0; + +void Time::init() +{ + s_freq = SDL_GetPerformanceFrequency(); + s_lastCounter = SDL_GetPerformanceCounter(); +} + +void Time::update() +{ + Uint64 now = SDL_GetPerformanceCounter(); + s_deltaTime = (double)(now - s_lastCounter) / s_freq; + s_lastCounter = now; + + // 防止切后台 + if (s_deltaTime > 0.05) + s_deltaTime = 0.05; + + // FPS + s_frames++; + s_fpsTimer += s_deltaTime; + + if (s_fpsTimer >= 1.0) { + s_fps = s_frames / s_fpsTimer; + s_frames = 0; + s_fpsTimer = 0.0; + } +} + +double Time::deltaTime() +{ + return s_deltaTime; +} + +double Time::fps() +{ + return s_fps; +} diff --git a/src/core/Time.h b/src/core/Time.h new file mode 100644 index 0000000..919950b --- /dev/null +++ b/src/core/Time.h @@ -0,0 +1,20 @@ +#pragma once +#include + +class Time { +public: + static void init(); + static void update(); + + static double deltaTime(); + static double fps(); + +private: + static Uint64 s_lastCounter; + static Uint64 s_freq; + static double s_deltaTime; + + static int s_frames; + static double s_fps; + static double s_fpsTimer; +};