Changeset 1021 for code/trunk/src/orxonox/tools
- Timestamp:
- Apr 10, 2008, 5:03:34 PM (17 years ago)
- Location:
- code/trunk/src/orxonox/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/orxonox/tools/Timer.cc
r890 r1021 46 46 this->time_ = 0; 47 47 } 48 49 /** 50 @brief Updates the timer before the frames are rendered. 51 */ 52 void TimerBase::tick(float dt) 53 { 54 if (this->bActive_) 55 { 56 // If active: Decrease the timer by the duration of the last frame 57 this->time_ -= dt; 58 59 if (this->time_ <= 0) 60 { 61 // It's time to call the function 62 if (this->bLoop_) 63 // Q: Why '+=' and not '='? A: Think about it. It's more accurate like that. Seriously. 64 this->time_ += this->interval_; 65 else 66 this->stopTimer(); // Stop the timer if we don't want to loop 67 68 this->run(); 69 } 70 } 71 } 72 48 73 } -
code/trunk/src/orxonox/tools/Timer.h
r871 r1021 58 58 #define _Timer_H__ 59 59 60 #include <OgreFrameListener.h>61 60 #include "../OrxonoxPrereqs.h" 61 #include "core/Tickable.h" 62 62 63 63 namespace orxonox 64 64 { 65 65 //! TimerBase is the parent of the Timer class. 66 class _OrxonoxExport TimerBase : public OrxonoxClass66 class _OrxonoxExport TimerBase : public Tickable 67 67 { 68 friend class TimerFrameListener;69 70 68 public: 71 69 TimerBase(); … … 83 81 /** @brief Returns true if the Timer is active (= not stoped, not paused). @return True = Time is active */ 84 82 inline bool isActive() const { return this->bActive_; } 83 84 void tick(float dt); 85 85 86 86 protected: … … 145 145 }; 146 146 147 //! The TimerFrameListener manages all Timers in the game.148 class TimerFrameListener : public Ogre::FrameListener149 {150 private:151 /** @brief Gets called before a frame gets rendered. */152 bool frameStarted(const Ogre::FrameEvent &evt)153 {154 // Iterate through all Timers155 for (Iterator<TimerBase> it = ObjectList<TimerBase>::start(); it; )156 {157 if (it->isActive())158 {159 // If active: Decrease the timer by the duration of the last frame160 it->time_ -= evt.timeSinceLastFrame;161 162 if (it->time_ <= 0)163 {164 // It's time to call the function165 if (it->bLoop_)166 it->time_ += it->interval_; // Q: Why '+=' and not '='? A: Think about it. It's more accurate like that. Seriously.167 else168 it->stopTimer(); // Stop the timer if we don't want to loop169 170 (it++)->run();171 }172 else173 ++it;174 }175 else176 ++it;177 }178 179 return FrameListener::frameStarted(evt);180 }181 };182 147 } 183 148
Note: See TracChangeset
for help on using the changeset viewer.