parent
a280005bd9
commit
4d6cecc7e0
@ -0,0 +1,26 @@
|
||||
|
||||
|
||||
class FrameWatcher {
|
||||
|
||||
|
||||
|
||||
|
||||
public:
|
||||
FrameWatcher();
|
||||
~FrameWatcher();
|
||||
|
||||
void do_tick();
|
||||
|
||||
private:
|
||||
|
||||
float get_elapsed_time();
|
||||
|
||||
float step_size = 0.0166f;
|
||||
double frame_time = 0.0;
|
||||
double elapsed_time = 0.0;
|
||||
double delta_time = 0.0;
|
||||
double accumulator_time = 0.0;
|
||||
double current_time = 0.0;
|
||||
|
||||
|
||||
};
|
@ -0,0 +1,48 @@
|
||||
|
||||
#include "FrameWatcher.h"
|
||||
#include <chrono>
|
||||
|
||||
FrameWatcher::FrameWatcher() {
|
||||
|
||||
}
|
||||
|
||||
FrameWatcher::~FrameWatcher()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void FrameWatcher::do_tick() {
|
||||
|
||||
|
||||
elapsed_time = get_elapsed_time();
|
||||
delta_time = elapsed_time - current_time;
|
||||
current_time = elapsed_time;
|
||||
|
||||
if (delta_time > 0.2f)
|
||||
delta_time = 0.2f;
|
||||
|
||||
accumulator_time += delta_time;
|
||||
|
||||
while ((accumulator_time - step_size) >= step_size) {
|
||||
accumulator_time -= step_size;
|
||||
|
||||
// ==== DELTA TIME LOCKED ====
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
float FrameWatcher::get_elapsed_time() {
|
||||
|
||||
static std::chrono::time_point<std::chrono::system_clock> start;
|
||||
static bool started = false;
|
||||
|
||||
if (!started) {
|
||||
start = std::chrono::system_clock::now();
|
||||
started = true;
|
||||
}
|
||||
|
||||
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
|
||||
std::chrono::duration<double> elapsed_time = now - start;
|
||||
return static_cast<float>(elapsed_time.count());
|
||||
}
|
||||
|
Loading…
Reference in new issue