X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftimer.cpp;h=273cf8e72ce9228434a4ec13bfa2e1444b553bcf;hb=f1e15f44f709d6b4fa45e858dc12d7d701ae8ddc;hp=d504fa92e0e8ebc2e82df2158971ed22e9cdf14c;hpb=2c78a029e3c7915c34011ac12f2ad07d5a46e0df;p=supertux.git diff --git a/src/timer.cpp b/src/timer.cpp index d504fa92e..273cf8e72 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -1,145 +1,61 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2005 Matthias Braun // -// C Implementation: timer +// 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. // -// Description: -// -// -// Author: Tobias Glaesser , (C) 2004 -// -// Copyright: See COPYING file that comes with this distribution -// -// - -#include "SDL.h" -#include "defines.h" +// 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 #include "timer.h" -unsigned int st_pause_ticks, st_pause_count; +float global_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) -{ - 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_type::init(bool st_ticks) -{ - period = 0; - time = 0; - get_ticks = st_ticks ? st_get_ticks : SDL_GetTicks; } void -timer_type::start(unsigned int period_) +Timer::start(float period, bool cyclic) { - time = get_ticks(); - period = period_; + this->period = period; + this->cyclic = cyclic; + cycle_start = global_time; } -void -timer_type::stop() +bool +Timer::check() { - if(get_ticks == st_get_ticks) - init(true); - else - init(false); -} - -int -timer_type::check() -{ - if((time != 0) && (time + period > get_ticks())) - return true; - else - { - time = 0; - return false; + if(period == 0) + return false; + + if(global_time - cycle_start >= period) { + if(cyclic) { + cycle_start = global_time - fmodf(global_time - cycle_start, period); + } else { + period = 0; } -} - -int -timer_type::started() -{ - if(time != 0) return true; - else - return false; -} - -int -timer_type::get_left() -{ - return (period - (get_ticks() - time)); -} - -int -timer_type::get_gone() -{ - return (get_ticks() - time); -} - -void -timer_type::fwrite(FILE* fi) -{ - unsigned int diff_ticks; - int tick_mode; - if(time != 0) - diff_ticks = get_ticks() - time; - else - diff_ticks = 0; - - ::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); -} - -void -timer_type::fread(FILE* fi) -{ - unsigned int diff_ticks; - int tick_mode; - - ::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 - get_ticks = SDL_GetTicks; - - if (diff_ticks != 0) - time = get_ticks() - diff_ticks; - else - time = 0; + } + return false; } -/* EOF */