X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftimer.cpp;h=1fd716d820ef0be4e465839087702c7acf1d051f;hb=b179b98af661372cda14ef44c49d142a0a98a4bc;hp=858f3fedc6f0974df9378c875892f487147d54a6;hpb=a9b83d7e4034285af26de6e1da2139d4b7a3d541;p=supertux.git diff --git a/src/timer.cpp b/src/timer.cpp index 858f3fedc..1fd716d82 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -1,14 +1,22 @@ +// $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" @@ -19,7 +27,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,100 +40,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, bool st_ticks) +bool st_pause_ticks_started(void) { - ptimer->period = 0; - ptimer->time = 0; - ptimer->get_ticks = st_ticks ? st_get_ticks : SDL_GetTicks; +if(st_pause_count == 0) +return false; +else +return true; } -void timer_start(timer_type* ptimer, unsigned int period) +Timer::Timer() { - ptimer->time = ptimer->get_ticks(); - ptimer->period = period; + init(true); } -void timer_stop(timer_type* ptimer) +void +Timer::init(bool st_ticks) { - if(ptimer->get_ticks == st_get_ticks) - timer_init(ptimer,true); + period = 0; + time = 0; + get_ticks = st_ticks ? st_get_ticks : SDL_GetTicks; +} + +void +Timer::start(unsigned int period_) +{ + time = get_ticks(); + period = period_; +} + +void +Timer::stop() +{ + if(get_ticks == st_get_ticks) + init(true); else - timer_init(ptimer,false); + init(false); } -int timer_check(timer_type* ptimer) +int +Timer::check() { - if((ptimer->time != 0) && (ptimer->time + ptimer->period > ptimer->get_ticks())) + if((time != 0) && (time + period > get_ticks())) return true; else { - ptimer->time = 0; + time = 0; return false; } } -int timer_started(timer_type* ptimer) +int +Timer::started() { - if(ptimer->time != 0) + if(time != 0) return true; else 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) + ::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 = false; - fwrite(&tick_mode,sizeof(unsigned int),1,fi); + ::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); + + ::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) - ptimer->get_ticks = st_get_ticks; + get_ticks = st_get_ticks; else - ptimer->get_ticks = SDL_GetTicks; + get_ticks = SDL_GetTicks; if (diff_ticks != 0) - ptimer->time = ptimer->get_ticks() - diff_ticks; + time = get_ticks() - diff_ticks; else - ptimer->time = 0; + time = 0; } +/* EOF */