X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftimer.c;h=25a63a37abcec7cdadfe7be7368f08388603afcd;hb=b9511e761c02a52392c2291c4877609bfbe15400;hp=22b43d53acce04674eb22ab87147900096e391ce;hpb=43ae91e84ae574464a2ff634daa8a16e253b47fa;p=supertux.git diff --git a/src/timer.c b/src/timer.c index 22b43d53a..25a63a37a 100644 --- a/src/timer.c +++ b/src/timer.c @@ -1,7 +1,7 @@ // // C Implementation: timer // -// Description: +// Description: // // // Author: Tobias Glaesser , (C) 2004 @@ -10,30 +10,66 @@ // // -#include +#include "SDL.h" #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,47 @@ 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); +} + +int timer_fwrite(timer_type* ptimer, FILE* fi) +{ + unsigned int diff_ticks; + int tick_mode; + if(ptimer->time != 0) + diff_ticks = ptimer->get_ticks() - ptimer->time; + else + diff_ticks = 0; + + fwrite(&ptimer->period,sizeof(unsigned int),1,fi); + fwrite(&diff_ticks,sizeof(unsigned int),1,fi); + if(ptimer->get_ticks == st_get_ticks) + tick_mode = YES; + else + tick_mode = NO; + fwrite(&tick_mode,sizeof(unsigned int),1,fi); +} + +int timer_fread(timer_type* ptimer, FILE* fi) +{ + unsigned int diff_ticks; + int tick_mode; + fread(&ptimer->period,sizeof(unsigned int),1,fi); + fread(&diff_ticks,sizeof(unsigned int),1,fi); + fread(&tick_mode,sizeof(unsigned int),1,fi); + if(tick_mode == YES) + ptimer->get_ticks = st_get_ticks; + else + ptimer->get_ticks = SDL_GetTicks; + if(diff_ticks != 0) + ptimer->time = ptimer->get_ticks() - diff_ticks; + else + ptimer->time = 0; + } +