Bibi/src/game_time.c

69 lines
1.5 KiB
C

/*
* time.c
*
* Created on: 16 mars 2010
* Author: reveille
*/
#include "../include/game_time.h"
#include "../include/constant.h"
static Uint32 timer1, timer2;
struct s_game_time {
// Number of cycles to process before displaying an image
Uint16 cycles_to_calculate;
// Current speed of the game
Uint16 speed;
// Duration of a cycle (in ms) ~ 14ms
Uint16 cycle_length;
};
static struct s_game_time the_game_time;
Uint16 game_time_get_cycles_to_calculate() {
return the_game_time.cycles_to_calculate;
}
Uint16 game_time_get_speed () {
return the_game_time.speed;
}
Uint16 game_time_get_cycles_length(){
return the_game_time.cycle_length;
}
void game_time_init() {
the_game_time.cycles_to_calculate = 0;
game_time_set_speed(DEFAULT_GAME_SPEED);
}
// Set the speed of the game (number of cycles per second)
void game_time_set_speed(Uint16 speed) {
if (speed == 0)
speed = 1;
the_game_time.speed = speed;
the_game_time.cycle_length = 1000 / speed;
timer1 = SDL_GetTicks();
}
void game_time_update() {
while (1) {
timer2 = SDL_GetTicks() - timer1;
if (timer2 >= the_game_time.cycle_length)
break;
else
SDL_Delay(3);
}
timer1 = SDL_GetTicks() - (timer2 % the_game_time.cycle_length);
the_game_time.cycles_to_calculate = timer2 / the_game_time.cycle_length;
//printf ("%d \n", the_game_time.cycles_to_calculate);
if (the_game_time.cycles_to_calculate > MAX_SKIPPED_FRAMES)
the_game_time.cycles_to_calculate = MAX_SKIPPED_FRAMES;
}