mirror of
https://github.com/FunKey-Project/Bibi.git
synced 2026-01-27 02:04:46 +01:00
69 lines
1.5 KiB
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;
|
|
}
|