You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
1.8 KiB
93 lines
1.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#ifndef TIMEDEVENTMGR_H |
|
#define TIMEDEVENTMGR_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "utlpriorityqueue.h" |
|
|
|
|
|
// |
|
// |
|
// These classes provide fast timed event callbacks. To use them, make a CTimedEventMgr |
|
// and put CEventRegister objects in your objects that want the timed events. |
|
// |
|
// |
|
|
|
|
|
class CTimedEventMgr; |
|
|
|
|
|
abstract_class IEventRegisterCallback |
|
{ |
|
public: |
|
virtual void FireEvent() = 0; |
|
}; |
|
|
|
|
|
class CEventRegister |
|
{ |
|
friend bool TimedEventMgr_LessFunc( CEventRegister* const &a, CEventRegister* const &b ); |
|
friend class CTimedEventMgr; |
|
|
|
public: |
|
CEventRegister(); |
|
~CEventRegister(); |
|
|
|
// Call this before ever calling SetUpdateInterval(). |
|
void Init( CTimedEventMgr *pMgr, IEventRegisterCallback *pCallback ); |
|
|
|
// Use these to start and stop getting updates. |
|
void SetUpdateInterval( float interval ); |
|
void StopUpdates(); |
|
|
|
inline bool IsRegistered() const { return m_bRegistered; } |
|
|
|
private: |
|
|
|
void Reregister(); // After having an event processed, this is called to have it register for the next one. |
|
void Term(); |
|
|
|
|
|
private: |
|
|
|
CTimedEventMgr *m_pEventMgr; |
|
float m_flNextEventTime; |
|
float m_flUpdateInterval; |
|
IEventRegisterCallback *m_pCallback; |
|
bool m_bRegistered; |
|
}; |
|
|
|
|
|
class CTimedEventMgr |
|
{ |
|
friend class CEventRegister; |
|
|
|
public: |
|
CTimedEventMgr(); |
|
|
|
// Call this each frame to fire events. |
|
void FireEvents(); |
|
|
|
|
|
private: |
|
|
|
// Things used by CEventRegister. |
|
void RegisterForNextEvent( CEventRegister *pEvent ); |
|
void RemoveEvent( CEventRegister *pEvent ); |
|
|
|
private: |
|
|
|
// Events, sorted by the time at which they will fire. |
|
CUtlPriorityQueue<CEventRegister*> m_Events; |
|
}; |
|
|
|
|
|
#endif // TIMEDEVENTMGR_H
|
|
|