1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| class EventListener;
class EventManager // singleton ou truc du genre
{
public :
void AddListener(EventListener* Listener)
{
if (Listener)
myListeners.insert(Listener);
}
void RemoveListener(EventListener* Listener)
{
myListeners.erase(Listener);
}
void Update()
{
SDL_Event Event;
while (SDL_PollEvent(&Event))
{
// convertir et dispatcher l'évènement aux écouteurs...
}
}
private :
std::set<EventListener*> myListeners;
};
class EventListener
{
public :
virtual ~EventListener()
{
EventManager::GetInstance().RemoveListener(this);
}
virtual void OnKeyPressed(int Code) {}
virtual void OnButtonPressed(int Code) {}
virtual void OnResize(int Width, int Height) {}
protected :
EventListener()
{
EventManager::GetInstance().AddListener(this);
}
};
class Game : public EventListener
{
...
};
class Character : public EventListener
{
...
}; |