X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftimer.c;h=eb9cccd8dd7ee5b7a1c91fe9e605151e15432085;hb=416e3a38d49f534ba8b65a63723bdb33ec018c68;hp=22b43d53acce04674eb22ab87147900096e391ce;hpb=43ae91e84ae574464a2ff634daa8a16e253b47fa;p=supertux.git diff --git a/src/timer.c b/src/timer.c index 22b43d53a..eb9cccd8d 100644 --- a/src/timer.c +++ b/src/timer.c @@ -14,26 +14,62 @@ #include "defines.h" #include "timer.h" -void timer_init(timer_type* ptimer) +unsigned int st_pause_ticks, st_pause_count; + +unsigned int st_get_ticks(void) +{ +if(st_pause_count != 0) +return SDL_GetTicks() - st_pause_ticks - SDL_GetTicks() + st_pause_count; +else +return SDL_GetTicks() - st_pause_ticks; +} + +void st_pause_ticks_init(void) +{ +st_pause_ticks = 0; +st_pause_count = 0; +} + +void st_pause_ticks_start(void) +{ +st_pause_count = SDL_GetTicks(); +} + +void st_pause_ticks_stop(void) +{ +st_pause_ticks += SDL_GetTicks() - st_pause_count; +st_pause_count = 0; +} + +void timer_init(timer_type* ptimer, int st_ticks) { ptimer->period = 0; ptimer->time = 0; + + if(st_ticks == YES) + ptimer->get_ticks = st_get_ticks; + else + ptimer->get_ticks = SDL_GetTicks; + } void timer_start(timer_type* ptimer, unsigned int period) { - ptimer->time = SDL_GetTicks(); + ptimer->time = ptimer->get_ticks(); ptimer->period = period; } void timer_stop(timer_type* ptimer) { - timer_init(ptimer); +if(ptimer->get_ticks == st_get_ticks) + timer_init(ptimer,YES); +else + timer_init(ptimer,NO); } int timer_check(timer_type* ptimer) { - if(ptimer->time != 0 && ptimer->time + ptimer->period > SDL_GetTicks()) + if((ptimer->time != 0) && (ptimer->time + ptimer->period > ptimer->get_ticks())) return YES; else { @@ -52,10 +88,10 @@ int timer_started(timer_type* ptimer) int timer_get_left(timer_type* ptimer) { - return (ptimer->period - (SDL_GetTicks() - ptimer->time)); + return (ptimer->period - (ptimer->get_ticks() - ptimer->time)); } int timer_get_gone(timer_type* ptimer) { - return (SDL_GetTicks() - ptimer->time); + return (ptimer->get_ticks() - ptimer->time); }