X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftimer.c;h=25a63a37abcec7cdadfe7be7368f08388603afcd;hb=b9511e761c02a52392c2291c4877609bfbe15400;hp=ffe58cd0511e7d9d6c5412673c3404c4994de470;hpb=6e7cc3b4259e75a61df2984571d0ab1994c7cceb;p=supertux.git diff --git a/src/timer.c b/src/timer.c index ffe58cd05..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,7 +10,7 @@ // // -#include +#include "SDL.h" #include "defines.h" #include "timer.h" @@ -18,49 +18,58 @@ 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; + 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; + st_pause_ticks = 0; + st_pause_count = 0; } void st_pause_ticks_start(void) { -st_pause_count = SDL_GetTicks(); + st_pause_count = SDL_GetTicks(); } void st_pause_ticks_stop(void) { -st_pause_ticks += SDL_GetTicks() - st_pause_count; -st_pause_count = 0; + st_pause_ticks += SDL_GetTicks() - st_pause_count; + st_pause_count = 0; } -void timer_init(timer_type* ptimer) +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 = st_get_ticks(); + 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 > st_get_ticks())) + if((ptimer->time != 0) && (ptimer->time + ptimer->period > ptimer->get_ticks())) return YES; else { @@ -79,10 +88,47 @@ int timer_started(timer_type* ptimer) int timer_get_left(timer_type* ptimer) { - return (ptimer->period - (st_get_ticks() - ptimer->time)); + return (ptimer->period - (ptimer->get_ticks() - ptimer->time)); } int timer_get_gone(timer_type* ptimer) { - return (st_get_ticks() - 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; + +} +