core/TimerSys.cpp
changeset 727 fade10824d88
parent 673 fc1d50579d06
child 1108 fafe809b16ca
     1.1 --- a/core/TimerSys.cpp	Wed May 02 21:00:13 2007 +0000
     1.2 +++ b/core/TimerSys.cpp	Wed May 02 22:35:51 2007 +0000
     1.3 @@ -15,6 +15,17 @@
     1.4  #include "TimerSys.h"
     1.5  
     1.6  TimerSystem g_Timers;
     1.7 +TickInfo g_SimTicks;
     1.8 +
     1.9 +inline float GetSimulatedTime()
    1.10 +{
    1.11 +	if (g_SimTicks.ticking)
    1.12 +	{
    1.13 +		return gpGlobals->curtime;
    1.14 +	} else {
    1.15 +		return g_SimTicks.ticktime;
    1.16 +	}
    1.17 +}
    1.18  
    1.19  void ITimer::Initialize(ITimedEvent *pCallbacks, float fInterval, float fToExec, void *pData, int flags)
    1.20  {
    1.21 @@ -52,10 +63,11 @@
    1.22  	ITimer *pTimer;
    1.23  	TimerIter iter;
    1.24  
    1.25 +	float curtime = GetSimulatedTime();
    1.26  	for (iter=m_SingleTimers.begin(); iter!=m_SingleTimers.end(); )
    1.27  	{
    1.28  		pTimer = (*iter);
    1.29 -		if (gpGlobals->curtime >= pTimer->m_ToExec)
    1.30 +		if (curtime >= pTimer->m_ToExec)
    1.31  		{
    1.32  			pTimer->m_InExec = true;
    1.33  			pTimer->m_Listener->OnTimer(pTimer, pTimer->m_pData);
    1.34 @@ -71,7 +83,7 @@
    1.35  	for (iter=m_LoopTimers.begin(); iter!=m_LoopTimers.end(); )
    1.36  	{
    1.37  		pTimer = (*iter);
    1.38 -		if (gpGlobals->curtime >= pTimer->m_ToExec)
    1.39 +		if (curtime >= pTimer->m_ToExec)
    1.40  		{
    1.41  			pTimer->m_InExec = true;
    1.42  			res = pTimer->m_Listener->OnTimer(pTimer, pTimer->m_pData);
    1.43 @@ -83,19 +95,19 @@
    1.44  				continue;
    1.45  			}
    1.46  			pTimer->m_InExec = false;
    1.47 -			pTimer->m_ToExec = gpGlobals->curtime + pTimer->m_Interval;
    1.48 +			pTimer->m_ToExec = curtime + pTimer->m_Interval;
    1.49  		}
    1.50  		iter++;
    1.51  	}
    1.52  
    1.53 -	m_LastExecTime = gpGlobals->curtime;
    1.54 +	m_LastExecTime = curtime;
    1.55  }
    1.56  
    1.57  ITimer *TimerSystem::CreateTimer(ITimedEvent *pCallbacks, float fInterval, void *pData, int flags)
    1.58  {
    1.59  	ITimer *pTimer;
    1.60  	TimerIter iter;
    1.61 -	float to_exec = gpGlobals->curtime + fInterval;
    1.62 +	float to_exec = GetSimulatedTime() + fInterval;
    1.63  
    1.64  	if (m_FreeTimers.empty())
    1.65  	{
    1.66 @@ -160,7 +172,7 @@
    1.67  		{
    1.68  			if (delayExec)
    1.69  			{
    1.70 -				pTimer->m_ToExec = gpGlobals->curtime + pTimer->m_Interval;
    1.71 +				pTimer->m_ToExec = GetSimulatedTime() + pTimer->m_Interval;
    1.72  			}
    1.73  			pTimer->m_InExec = false;
    1.74  			return;
    1.75 @@ -203,12 +215,14 @@
    1.76  	for (iter=m_SingleTimers.begin(); iter!=m_SingleTimers.end(); iter++)
    1.77  	{
    1.78  		pTimer = (*iter);
    1.79 -		pTimer->m_ToExec = pTimer->m_ToExec - m_LastExecTime + gpGlobals->curtime;
    1.80 +		pTimer->m_ToExec = pTimer->m_ToExec - m_LastExecTime + GetSimulatedTime();
    1.81  	}
    1.82  
    1.83  	for (iter=m_LoopTimers.begin(); iter!=m_LoopTimers.end(); iter++)
    1.84  	{
    1.85  		pTimer = (*iter);
    1.86 -		pTimer->m_ToExec = pTimer->m_ToExec - m_LastExecTime + gpGlobals->curtime;
    1.87 +		pTimer->m_ToExec = pTimer->m_ToExec - m_LastExecTime + GetSimulatedTime();
    1.88  	}
    1.89 +
    1.90 +	m_LastExecTime = GetSimulatedTime();
    1.91  }