Changeset 8051 for code/branches/tutorial/src/libraries/tools/Timer.cc
- Timestamp:
- Mar 9, 2011, 11:27:05 AM (14 years ago)
- Location:
- code/branches/tutorial
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/tutorial
- Property svn:mergeinfo changed
/code/branches/usability merged: 8018-8041
- Property svn:mergeinfo changed
-
code/branches/tutorial/src/libraries/tools/Timer.cc
r7401 r8051 35 35 36 36 #include <set> 37 38 #include <boost/bimap.hpp> 37 39 38 40 #include "util/Clock.h" … … 41 43 #include "core/command/CommandExecutor.h" 42 44 #include "core/command/Functor.h" 45 #include "tools/interfaces/TimeFactorListener.h" 43 46 44 47 namespace orxonox 45 48 { 46 49 SetConsoleCommand("delay", &delay).argumentCompleter(1, autocompletion::command()); 50 SetConsoleCommand("delayreal", &delayreal).argumentCompleter(1, autocompletion::command()); 51 SetConsoleCommand("killdelay", &killdelay); 47 52 SetConsoleCommand("killdelays", &killdelays); 48 53 49 static std::set<Timer*> delaytimerset; 50 51 /** 52 @brief Console-command: Calls another console command after @a delay seconds. 54 static boost::bimap<unsigned int, Timer*> delaytimers; 55 static unsigned int delayHandleCounter = 0; 56 57 /** 58 @brief Console-command: Calls another console command after @a delay seconds (game time). 53 59 @param delay The delay in seconds 54 60 @param command The console command 55 */ 56 void delay(float delay, const std::string& command) 57 { 58 Timer* delaytimer = new Timer(); 59 delaytimerset.insert(delaytimer); 61 @return The handle of the delayed command, can be used as argument for killdelay() 62 */ 63 unsigned int delay(float delay, const std::string& command) 64 { 65 return addDelayedCommand(new Timer(), delay, command); 66 } 67 68 /** 69 @brief Console-command: Calls another console command after @a delay seconds (real time) 70 @param delay The delay in seconds 71 @param command The console command 72 @return The handle of the delayed command, can be used as argument for killdelay() 73 */ 74 unsigned int delayreal(float delay, const std::string& command) 75 { 76 return addDelayedCommand(new RealTimer(), delay, command); 77 } 78 79 /** 80 @brief Helper function, used by delay() and delayreal() to add a delayed command. 81 @param timer The timer which will execute the command 82 @param delay The delay in seconds 83 @param command The console command 84 @return The handle of the delayed command, can be used as argument for killdelay() 85 */ 86 unsigned int addDelayedCommand(Timer* timer, float delay, const std::string& command) 87 { 88 delaytimers.insert(boost::bimap<unsigned int, Timer*>::value_type(++delayHandleCounter, timer)); 60 89 61 90 const ExecutorStaticPtr& delayexecutor = createExecutor(createFunctor(&executeDelayedCommand)); 62 delayexecutor->setDefaultValues(delaytimer, command); 63 delaytimer->setTimer(delay, false, delayexecutor); 91 delayexecutor->setDefaultValues(timer, command); 92 timer->setTimer(delay, false, delayexecutor); 93 94 return delayHandleCounter; 64 95 } 65 96 … … 73 104 CommandExecutor::execute(command); 74 105 timer->destroy(); 75 delaytimers et.erase(timer);106 delaytimers.right.erase(timer); 76 107 } 77 108 … … 81 112 void killdelays() 82 113 { 83 for (std::set<Timer*>::iterator it = delaytimerset.begin(); it != delaytimerset.end(); ++it) 84 (*it)->destroy(); 85 86 delaytimerset.clear(); 114 for (boost::bimap<unsigned int, Timer*>::left_map::iterator it = delaytimers.left.begin(); it != delaytimers.left.end(); ++it) 115 it->second->destroy(); 116 117 delaytimers.clear(); 118 } 119 120 /** 121 @brief Console-command: Kills a delayed command with given handle. 122 */ 123 void killdelay(unsigned int handle) 124 { 125 boost::bimap<unsigned int, Timer*>::left_map::iterator it = delaytimers.left.find(handle); 126 if (it != delaytimers.left.end()) 127 { 128 it->second->destroy(); 129 delaytimers.left.erase(it); 130 } 87 131 } 88 132 … … 93 137 { 94 138 this->init(); 95 Register Object(Timer);139 RegisterRootObject(Timer); 96 140 } 97 141 … … 106 150 { 107 151 this->init(); 108 Register Object(Timer);152 RegisterRootObject(Timer); 109 153 110 154 this->setTimer(interval, bLoop, executor, bKillAfterCall); … … 123 167 124 168 this->time_ = 0; 169 } 170 171 /** 172 @brief Returns the current time factor of the game. 173 */ 174 float Timer::getTimeFactor() 175 { 176 return TimeFactorListener::getTimeFactor(); 125 177 } 126 178 … … 168 220 } 169 221 } 222 223 /////////////// 224 // RealTimer // 225 /////////////// 226 /// @copydoc Timer::Timer 227 RealTimer::RealTimer() 228 { 229 RegisterObject(RealTimer); 230 } 231 232 /// @copydoc Timer::Timer(float, bool, const ExecutorPtr&, bool) 233 RealTimer::RealTimer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall) : Timer(interval, bLoop, executor, bKillAfterCall) 234 { 235 RegisterObject(RealTimer); 236 } 237 238 /// Returns always 1 because RealTimer doesn't depend on the game time. 239 float RealTimer::getTimeFactor() 240 { 241 return 1; 242 } 170 243 }
Note: See TracChangeset
for help on using the changeset viewer.