| 250 | } |
| 251 | |
| 252 | void TimerSystem::RunFrame() |
| 253 | { |
| 254 | ITimer *pTimer; |
| 255 | TimerIter iter; |
| 256 | |
| 257 | double curtime = GetSimulatedTime(); |
| 258 | for (iter=m_SingleTimers.begin(); iter!=m_SingleTimers.end(); ) |
| 259 | { |
| 260 | pTimer = (*iter); |
| 261 | if (curtime >= pTimer->m_ToExec) |
| 262 | { |
| 263 | pTimer->m_InExec = true; |
| 264 | pTimer->m_Listener->OnTimer(pTimer, pTimer->m_pData); |
| 265 | pTimer->m_Listener->OnTimerEnd(pTimer, pTimer->m_pData); |
| 266 | iter = m_SingleTimers.erase(iter); |
| 267 | m_FreeTimers.push(pTimer); |
| 268 | } |
| 269 | else |
| 270 | { |
| 271 | break; |
| 272 | } |
| 273 | } |
| 274 | |
| 275 | ResultType res; |
| 276 | for (iter=m_LoopTimers.begin(); iter!=m_LoopTimers.end(); ) |
| 277 | { |
| 278 | pTimer = (*iter); |
| 279 | if (curtime >= pTimer->m_ToExec) |
| 280 | { |
| 281 | pTimer->m_InExec = true; |
| 282 | res = pTimer->m_Listener->OnTimer(pTimer, pTimer->m_pData); |
| 283 | if (pTimer->m_KillMe || (res == Pl_Stop)) |
| 284 | { |
| 285 | pTimer->m_Listener->OnTimerEnd(pTimer, pTimer->m_pData); |
| 286 | iter = m_LoopTimers.erase(iter); |
| 287 | m_FreeTimers.push(pTimer); |
| 288 | continue; |
| 289 | } |
| 290 | pTimer->m_InExec = false; |
| 291 | pTimer->m_ToExec = CalcNextThink(pTimer->m_ToExec, pTimer->m_Interval); |
| 292 | } |
| 293 | iter++; |
| 294 | } |
| 295 | } |
| 296 | |
| 297 | ITimer *TimerSystem::CreateTimer(ITimedEvent *pCallbacks, float fInterval, void *pData, int flags) |
| 298 | { |
nothing calls this directly
no test coverage detected