src/engine/eTimer.h

Go to the documentation of this file.
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 

Generated on Sat Mar 15 22:55:47 2008 for Armagetron Advanced by  doxygen 1.5.4