mpri-graphics-project/periodic_updates.cpp

58 lines
1.4 KiB
C++
Raw Normal View History

2018-02-12 18:40:05 +01:00
#include "periodic_updates.hpp"
#include <ctime>
#include <chrono>
2018-02-12 18:40:05 +01:00
#include <GL/glut.h>
static Ball* _ball = nullptr;
static std::chrono::time_point<std::chrono::steady_clock>
_last_time, _init_clocks;
2018-02-12 18:40:05 +01:00
static bool is_paused = false;
static double speed_factor = 1.;
2018-02-12 18:40:05 +01:00
void init_periodic_static(Ball* ball) {
_last_time = std::chrono::steady_clock::now();
_init_clocks = std::chrono::steady_clock::now();
2018-02-12 18:40:05 +01:00
_ball = ball;
}
double ellapsed_double(
std::chrono::time_point<std::chrono::steady_clock> beg,
std::chrono::time_point<std::chrono::steady_clock> end)
{
std::chrono::duration<double> ellapsed_db = end - beg;
return ellapsed_db.count();
}
2018-02-12 18:40:05 +01:00
void periodic_update() {
if(is_paused)
return;
printf("%lf\n", speed_factor);
auto now = std::chrono::steady_clock::now();
_ball->update_pos(speed_factor * ellapsed_double(_last_time, now));
_last_time = now;
2018-02-12 18:40:05 +01:00
glutPostRedisplay();
}
void periodic_kb_handler(unsigned char key, int, int) {
if(key == ' ') {
if(is_paused)
_last_time = std::chrono::steady_clock::now();
is_paused = !is_paused;
}
else if(key == '<') {
speed_factor -= .1;
if(speed_factor <= 0.05)
speed_factor = .1;
}
else if(key == '>') {
speed_factor += .1;
}
else if(key == '0') {
speed_factor = 1.;
}
}