66 lines
1.4 KiB
C
66 lines
1.4 KiB
C
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef TIMEDEVENT_H
|
||
|
#define TIMEDEVENT_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
// This class triggers events at a specified rate. Just call NextEvent() and do an event until it
|
||
|
// returns false. For example, if you want to spawn particles 10 times per second, do this:
|
||
|
// pTimer->SetRate(10);
|
||
|
// float tempDelta = fTimeDelta;
|
||
|
// while(pTimer->NextEvent(tempDelta))
|
||
|
// spawn a particle
|
||
|
|
||
|
class TimedEvent
|
||
|
{
|
||
|
public:
|
||
|
TimedEvent()
|
||
|
{
|
||
|
m_TimeBetweenEvents = -1;
|
||
|
m_fNextEvent = 0;
|
||
|
}
|
||
|
|
||
|
// Rate is in events per second (ie: rate of 15 will trigger 15 events per second).
|
||
|
inline void Init(float rate)
|
||
|
{
|
||
|
m_TimeBetweenEvents = 1.0f / rate;
|
||
|
m_fNextEvent = 0;
|
||
|
}
|
||
|
|
||
|
inline void ResetRate(float rate)
|
||
|
{
|
||
|
m_TimeBetweenEvents = 1.0f / rate;
|
||
|
}
|
||
|
|
||
|
inline bool NextEvent(float &curDelta)
|
||
|
{
|
||
|
// If this goes off, you didn't call Init().
|
||
|
Assert( m_TimeBetweenEvents != -1 );
|
||
|
|
||
|
if(curDelta >= m_fNextEvent)
|
||
|
{
|
||
|
curDelta -= m_fNextEvent;
|
||
|
|
||
|
m_fNextEvent = m_TimeBetweenEvents;
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_fNextEvent -= curDelta;
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
float m_TimeBetweenEvents;
|
||
|
float m_fNextEvent; // When the next event should be triggered.
|
||
|
};
|
||
|
|
||
|
#endif // TIMEDEVENT_H
|