00001 /* 00002 00003 ************************************************************************* 00004 00005 ArmageTron -- Just another Tron Lightcycle Game in 3D. 00006 Copyright (C) 2000 Manuel Moos (manuel@moosnet.de) 00007 00008 ************************************************************************** 00009 00010 This program is free software; you can redistribute it and/or 00011 modify it under the terms of the GNU General Public License 00012 as published by the Free Software Foundation; either version 2 00013 of the License, or (at your option) any later version. 00014 00015 This program is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU General Public License for more details. 00019 00020 You should have received a copy of the GNU General Public License 00021 along with this program; if not, write to the Free Software 00022 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00023 00024 *************************************************************************** 00025 00026 */ 00027 00028 #ifndef ArmageTron_TIMER_H 00029 #define ArmageTron_TIMER_H 00030 00031 //#include <time> 00032 #include "tSysTime.h" 00033 #include "nNetObject.h" 00034 00035 class eTimer:public nNetObject{ 00036 public: 00037 REAL speed; // the time acceleration 00038 00039 eTimer(); 00040 eTimer(nMessage &m); 00041 virtual ~eTimer(); 00042 virtual void WriteSync(nMessage &m); 00043 virtual void ReadSync(nMessage &m); 00044 virtual nDescriptor &CreatorDescriptor() const; 00045 00046 REAL Time(); 00047 REAL TimeNoSync(){return REAL(Time()+(tSysTimeFloat()-lastTime_)*speed);} 00048 00049 void pause(bool p); 00050 00051 void SyncTime(); 00052 void Reset(REAL t=0); 00053 00054 REAL AverageFPS(){return 1/(averageSpf_.GetAverage()+EPS);} 00055 REAL AverageFrameTime(){return averageSpf_.GetAverage();} 00056 REAL FrameTime(){return spf_;} 00057 00058 bool IsSynced() const; 00059 00060 private: 00061 mutable double creationSystemTime_; 00062 double smoothedSystemTime_; 00063 double startTime_; 00064 nAverager startTimeOffset_; 00065 REAL startTimeSmoothedOffset_; 00066 nAverager qualityTester_; 00067 00068 // the current game time is always smoothedSystemTime_ - ( startTime_ + startTimeSmoothedOffset_ ). 00069 00070 REAL spf_; 00071 nAverager averageSpf_; 00072 00073 double lastTime_; 00074 double nextSync_; 00075 }; 00076 00077 REAL se_GameTime(); 00078 REAL se_GameTimeNoSync(); 00079 void se_SyncGameTimer(); 00080 00081 void se_ResetGameTimer(REAL t=0); 00082 void se_MakeGameTimer(); 00083 void se_KillGameTimer(); 00084 void se_PauseGameTimer(bool p); 00085 00086 REAL se_PredictTime(); 00087 REAL se_AverageFrameTime(); 00088 REAL se_AverageFPS(); 00089 00090 extern eTimer *se_mainGameTimer; 00091 #endif 00092 00093