X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftimer.cpp;h=f316fa57713ba47abf73699a20ce2492db094299;hb=9c511ea692d3a2339597211f08f18ea74fad35ec;hp=bff15a9444dc82ef18222788031e90fde7d54d46;hpb=ef208e1b7d93b6e434c17df26c8edcaa51088539;p=supertux.git diff --git a/src/timer.cpp b/src/timer.cpp index bff15a944..f316fa577 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -1,16 +1,25 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2004 Tobias Glaesser // -// C Implementation: timer -// -// 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 "SDL.h" + #include "defines.h" #include "timer.h" @@ -19,7 +28,7 @@ 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; + return /*SDL_GetTicks()*/ - st_pause_ticks /*- SDL_GetTicks()*/ + st_pause_count; else return SDL_GetTicks() - st_pause_ticks; } @@ -32,103 +41,128 @@ void st_pause_ticks_init(void) void st_pause_ticks_start(void) { - st_pause_count = SDL_GetTicks(); + if(st_pause_count == 0) + st_pause_count = SDL_GetTicks(); } void st_pause_ticks_stop(void) { +if(st_pause_count == 0) +return; + st_pause_ticks += SDL_GetTicks() - st_pause_count; st_pause_count = 0; } -void timer_init(timer_type* ptimer, int st_ticks) +bool st_pause_ticks_started(void) { - ptimer->period = 0; - ptimer->time = 0; +if(st_pause_count == 0) +return false; +else +return true; +} - if(st_ticks == YES) - ptimer->get_ticks = st_get_ticks; - else - ptimer->get_ticks = SDL_GetTicks; +Timer::Timer() +{ + init(true); +} +void +Timer::init(bool st_ticks) +{ + period = 0; + time = 0; + get_ticks = st_ticks ? st_get_ticks : SDL_GetTicks; } -void timer_start(timer_type* ptimer, unsigned int period) +void +Timer::start(unsigned int period_) { - ptimer->time = ptimer->get_ticks(); - ptimer->period = period; + time = get_ticks(); + period = period_; } -void timer_stop(timer_type* ptimer) +void +Timer::stop() { - if(ptimer->get_ticks == st_get_ticks) - timer_init(ptimer,YES); + if(get_ticks == st_get_ticks) + init(true); else - timer_init(ptimer,NO); + init(false); } -int timer_check(timer_type* ptimer) +int +Timer::check() { - if((ptimer->time != 0) && (ptimer->time + ptimer->period > ptimer->get_ticks())) - return YES; + if((time != 0) && (time + period > get_ticks())) + return true; else { - ptimer->time = 0; - return NO; + time = 0; + return false; } } -int timer_started(timer_type* ptimer) +int +Timer::started() { - if(ptimer->time != 0) - return YES; + if(time != 0) + return true; else - return NO; + return false; } -int timer_get_left(timer_type* ptimer) +int +Timer::get_left() { - return (ptimer->period - (ptimer->get_ticks() - ptimer->time)); + return (period - (get_ticks() - time)); } -int timer_get_gone(timer_type* ptimer) +int +Timer::get_gone() { - return (ptimer->get_ticks() - ptimer->time); + return (get_ticks() - time); } -void timer_fwrite(timer_type* ptimer, FILE* fi) +void +Timer::fwrite(FILE* fi) { unsigned int diff_ticks; int tick_mode; - if(ptimer->time != 0) - diff_ticks = ptimer->get_ticks() - ptimer->time; + if(time != 0) + diff_ticks = get_ticks() - 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; + ::fwrite(&period,sizeof(unsigned int),1,fi); + ::fwrite(&diff_ticks,sizeof(unsigned int),1,fi); + if(get_ticks == st_get_ticks) + tick_mode = true; else - tick_mode = NO; - fwrite(&tick_mode,sizeof(unsigned int),1,fi); + tick_mode = false; + ::fwrite(&tick_mode,sizeof(unsigned int),1,fi); } -void timer_fread(timer_type* ptimer, FILE* fi) +void +Timer::fread(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; + + ::fread(&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) + get_ticks = st_get_ticks; else - ptimer->get_ticks = SDL_GetTicks; - if(diff_ticks != 0) - ptimer->time = ptimer->get_ticks() - diff_ticks; + get_ticks = SDL_GetTicks; + + if (diff_ticks != 0) + time = get_ticks() - diff_ticks; else - ptimer->time = 0; + time = 0; } +/* EOF */