diff options
Diffstat (limited to 'src/crepe/api/LoopTimer.cpp')
-rw-r--r-- | src/crepe/api/LoopTimer.cpp | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/src/crepe/api/LoopTimer.cpp b/src/crepe/api/LoopTimer.cpp index f4be510..dd4d7e5 100644 --- a/src/crepe/api/LoopTimer.cpp +++ b/src/crepe/api/LoopTimer.cpp @@ -1,18 +1,14 @@ - #include "../facade/SDLContext.h" #include "../util/log.h" - #include "LoopTimer.h" -#define MS_PER_SECOND 1000.0 - using namespace crepe; LoopTimer::LoopTimer() { - dbg_trace(); + dbg_trace(); } -LoopTimer & LoopTimer::get_instance() { +LoopTimer& LoopTimer::get_instance() { static LoopTimer instance; return instance; } @@ -26,41 +22,36 @@ void LoopTimer::start() { void LoopTimer::update() { uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); - this->delta_time = (current_frame_time - last_frame_time) / MS_PER_SECOND; + this->delta_time = (current_frame_time - last_frame_time); if (this->delta_time > this->maximum_delta_time) { this->delta_time = this->maximum_delta_time; } - this->delta_time = this->game_scale; + this->delta_time *= this->game_scale; this->elapsed_time += this->delta_time; this->last_frame_time = current_frame_time; } double LoopTimer::get_delta_time() const { return this->delta_time; } - -int LoopTimer::get_current_time() const { return this->elapsed_time; } - +double LoopTimer::get_current_time() const { return this->elapsed_time; } void LoopTimer::advance_fixed_update() { this->elapsed_fixed_time += this->fixed_delta_time; } - double LoopTimer::get_fixed_delta_time() const { return this->fixed_delta_time; } void LoopTimer::set_fps(int fps) { this->fps = fps; - this->frame_target_time = 1.0 / this->fps; + this->frame_target_time = 1000.0 / this->fps; } int LoopTimer::get_fps() const { return this->fps; } - -void LoopTimer::set_game_scale(double value) { this->game_scale = value; }; - +void LoopTimer::set_game_scale(double value) { this->game_scale = value; } double LoopTimer::get_game_scale() const { return this->game_scale; } void LoopTimer::enforce_frame_rate() { uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); - double frame_duration = (current_frame_time - this->last_frame_time) / MS_PER_SECOND; + double frame_duration = (current_frame_time - this->last_frame_time); if (frame_duration < this->frame_target_time) { - uint32_t delay_time = static_cast<uint32_t>((this->frame_target_time - frame_duration) * MS_PER_SECOND); + uint32_t delay_time = static_cast<uint32_t>(this->frame_target_time - frame_duration); SDLContext::get_instance().delay(delay_time); } |