#include "utils/delta_timer.hpp" DeltaTimer::DeltaTimer() noexcept : last_counter_(SDL_GetPerformanceCounter()), perf_freq_(static_cast(SDL_GetPerformanceFrequency())), time_scale_(1.0F) { } float DeltaTimer::tick() noexcept { const Uint64 NOW = SDL_GetPerformanceCounter(); const Uint64 DIFF = (NOW > last_counter_) ? (NOW - last_counter_) : 0; last_counter_ = NOW; const double SECONDS = static_cast(DIFF) / perf_freq_; return static_cast(SECONDS * static_cast(time_scale_)); } float DeltaTimer::peek() const noexcept { const Uint64 NOW = SDL_GetPerformanceCounter(); const Uint64 DIFF = (NOW > last_counter_) ? (NOW - last_counter_) : 0; const double SECONDS = static_cast(DIFF) / perf_freq_; return static_cast(SECONDS * static_cast(time_scale_)); } void DeltaTimer::reset(Uint64 counter) noexcept { if (counter == 0) { last_counter_ = SDL_GetPerformanceCounter(); } else { last_counter_ = counter; } } void DeltaTimer::setTimeScale(float scale) noexcept { time_scale_ = std::max(scale, 0.0F); } float DeltaTimer::getTimeScale() const noexcept { return time_scale_; }