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