X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftimer.cpp;h=9c94f581c421cf1fc606be0d67cae8059a919e0c;hb=80acfab92ae7bdb38609bb74565ccac5dd329a2b;hp=bff15a9444dc82ef18222788031e90fde7d54d46;hpb=ef208e1b7d93b6e434c17df26c8edcaa51088539;p=supertux.git diff --git a/src/timer.cpp b/src/timer.cpp index bff15a944..9c94f581c 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -1,134 +1,61 @@ +// $Id$ // -// C Implementation: timer +// SuperTux +// Copyright (C) 2006 Matthias Braun // -// Description: -// -// -// Author: Tobias Glaesser , (C) 2004 -// -// Copyright: See COPYING file that comes with this distribution +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. // +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. // +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +#include -#include "SDL.h" -#include "defines.h" -#include "timer.h" +#include +#include "timer.hpp" -unsigned int st_pause_ticks, st_pause_count; +float game_time = 0; +float real_time = 0; -unsigned int st_get_ticks(void) +Timer::Timer() + : period(0), cycle_start(0), cyclic(false) { - 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) +Timer::~Timer() { - st_pause_ticks = 0; - st_pause_count = 0; } -void st_pause_ticks_start(void) +void +Timer::start(float period, bool cyclic) { - st_pause_count = SDL_GetTicks(); + this->period = period; + this->cyclic = cyclic; + cycle_start = game_time; } -void st_pause_ticks_stop(void) +bool +Timer::check() { - 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; - -} + if(period == 0) + return false; -void timer_start(timer_type* ptimer, unsigned int period) -{ - ptimer->time = ptimer->get_ticks(); - ptimer->period = period; -} - -void timer_stop(timer_type* 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 > ptimer->get_ticks())) - return YES; - else - { - ptimer->time = 0; - return NO; + if(game_time - cycle_start >= period) { + if(cyclic) { + cycle_start = game_time - fmodf(game_time - cycle_start, period); + } else { + period = 0; } -} - -int timer_started(timer_type* ptimer) -{ - if(ptimer->time != 0) - return YES; - else - return NO; -} - -int timer_get_left(timer_type* ptimer) -{ - return (ptimer->period - (ptimer->get_ticks() - ptimer->time)); -} - -int timer_get_gone(timer_type* ptimer) -{ - return (ptimer->get_ticks() - ptimer->time); -} - -void 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); -} - -void 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; + return true; + } + return false; } -