Initial commit: client source
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
#pragma once
|
||||
|
||||
class IEvent
|
||||
{
|
||||
public:
|
||||
IEvent();
|
||||
~IEvent();
|
||||
|
||||
virtual void Run() = 0;
|
||||
|
||||
void SetStartTime(float fTime) { m_fStartTime = fTime; }
|
||||
float GetStartTime() { return m_fStartTime; }
|
||||
|
||||
protected:
|
||||
float m_fStartTime;
|
||||
};
|
||||
|
||||
class CEventManager : public CSingleton<CEventManager>
|
||||
{
|
||||
public:
|
||||
CEventManager();
|
||||
virtual ~CEventManager()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void Destroy()
|
||||
{
|
||||
while (!m_eventQueue.empty())
|
||||
{
|
||||
IEvent * pEvent = m_eventQueue.top();
|
||||
m_eventQueue.pop();
|
||||
delete pEvent;
|
||||
}
|
||||
}
|
||||
|
||||
void Register(IEvent * pEvent)
|
||||
{
|
||||
m_eventQueue.push(pEvent);
|
||||
}
|
||||
|
||||
void Update(float fCurrentTime)
|
||||
{
|
||||
while (!m_eventQueue.empty())
|
||||
{
|
||||
IEvent * pEvent = m_eventQueue.top();
|
||||
|
||||
if (pEvent->GetStartTime() < fCurrentTime)
|
||||
break;
|
||||
|
||||
m_eventQueue.pop();
|
||||
float fTime = pEvent->GetStartTime();
|
||||
pEvent->Run();
|
||||
delete pEvent;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
struct EventComparisonFunc
|
||||
{
|
||||
bool operator () (IEvent * left, IEvent * right) const
|
||||
{
|
||||
return left->GetStartTime() > right->GetStartTime();
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::priority_queue<IEvent *, std::vector<IEvent *>, EventComparisonFunc> TEventQueue;
|
||||
TEventQueue m_eventQueue;
|
||||
};
|
||||
Reference in New Issue
Block a user