v4k-git-backup/demos/99-fpstest.c

82 lines
2.2 KiB
C
Raw Normal View History

2024-01-02 19:52:20 +00:00
#include "v4k.h"
vec3 campos1;
vec3 campos2;
tween_t anim;
bool cam_tween_reset=1;
camera_t cam;
#define NUM_SAMPLES 64
int tick_mode = 0;
static double smooth_delta() {
static double time_samples[NUM_SAMPLES] = {0};
static int curr_index = 0;
double time = window_delta();
time_samples[curr_index] = time;
if (++curr_index == NUM_SAMPLES)
curr_index = 0;
double average = 0;
for (int i = NUM_SAMPLES; i--; )
average += time_samples[i];
average /= NUM_SAMPLES;
time = min(time, average);
return time;
}
bool intro_camera() {
const float START_MOVING_ONTO_PLANET = 1.5f;
const float STAY_PUT_AT_PLANET = 4.0f;
const float ZOOM_OUT_TO_BOARD = 5.0f;
const float STAY_STILL = 6.0f;
const float LIFT_OFF = 7.0f;
if (cam_tween_reset) {
anim = tween();
tween_setkey(&anim, 0.0f, campos1, EASE_QUAD);
tween_setkey(&anim, START_MOVING_ONTO_PLANET, campos1, EASE_QUAD);
tween_setkey(&anim, STAY_PUT_AT_PLANET, campos2, EASE_QUAD);
tween_setkey(&anim, ZOOM_OUT_TO_BOARD, campos2, EASE_QUAD);
tween_setkey(&anim, LIFT_OFF, campos1, EASE_QUAD);
cam_tween_reset=0;
}
float val = !tick_mode ? window_delta() : tick_mode == 1 ? smooth_delta() : 0.016f;
printf("dt: %.04f\n", val);
bool done = tween_update(&anim, val) == 1.0f;
cam.position = anim.result;
camera_lookat(&cam, vec3(cam.position.x,0,cam.position.z));
return done;
}
void reset_intro() {
cam_tween_reset=1;
tween_destroy(&anim);
campos1 = vec3(0.0f, 5.0f, 0.0f);
campos2 = vec3(0.0f, 25.0f, 0.0f);
}
int main() {
window_create(75.0, WINDOW_FULLSCREEN|WINDOW_SQUARE/*|WINDOW_VSYNC_DISABLED*/);
// window_fps_unlock();
// window_fps_lock(60.0);
cam = camera();
reset_intro();
while( window_swap() && !input(KEY_ESC) ) { // game loop
if (intro_camera())
reset_intro();
ddraw_circle(vec3(0,0,0), vec3(0,-1,0), 1.5f);
if (input_down(KEY_SPACE))
tick_mode = ++tick_mode % 3;
ddraw_text2d(vec2(15, 95), va("mode: %s\n", !tick_mode ? "delta time" : tick_mode == 1 ? "avg delta time" : "fixed time increment"));
}
}