2021-04-04 21:04:12 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <map>
|
|
|
|
|
#include <mutex>
|
2021-04-08 20:39:53 +01:00
|
|
|
|
2021-04-04 21:04:12 +01:00
|
|
|
#include "Events/Events.hpp"
|
|
|
|
|
#include "EventListener.hpp"
|
|
|
|
|
|
|
|
|
|
namespace Bloom
|
|
|
|
|
{
|
2021-04-08 20:39:53 +01:00
|
|
|
/**
|
2022-03-20 17:37:36 +00:00
|
|
|
* The static EventManager class provides a method of dispatching events to a set of listeners.
|
2021-04-08 20:39:53 +01:00
|
|
|
*/
|
2021-04-04 21:04:12 +01:00
|
|
|
class EventManager
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
/**
|
2022-03-20 17:37:36 +00:00
|
|
|
* Registers an EventListener instance with the manager.
|
2021-04-08 20:39:53 +01:00
|
|
|
*
|
|
|
|
|
* All EventListener instances must be registered with the EventManager before any events can
|
|
|
|
|
* be dispatched to them.
|
|
|
|
|
*
|
|
|
|
|
* The EventManager possesses partial ownership of the EventListener. This is why we use a shared_ptr here.
|
2021-04-04 21:04:12 +01:00
|
|
|
*
|
|
|
|
|
* @param listenerName
|
|
|
|
|
*/
|
2022-03-20 17:37:36 +00:00
|
|
|
static void registerListener(std::shared_ptr<EventListener> listener);
|
2021-04-08 20:39:53 +01:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Deregister an EventListener instance.
|
|
|
|
|
*
|
|
|
|
|
* @param listenerId
|
|
|
|
|
* The ID of the EventListener to deregister. See EventListener::getId();
|
|
|
|
|
*/
|
2022-03-20 17:37:36 +00:00
|
|
|
static void deregisterListener(size_t listenerId);
|
2021-04-04 21:04:12 +01:00
|
|
|
|
2021-04-08 20:39:53 +01:00
|
|
|
/**
|
|
|
|
|
* Dispatches an event to all registered listeners, if they have registered an interest in the event type.
|
|
|
|
|
* See EventListener::registeredEventTypes for more.
|
|
|
|
|
*
|
|
|
|
|
* @param event
|
|
|
|
|
*/
|
2022-03-20 17:37:36 +00:00
|
|
|
static void triggerEvent(const Events::SharedGenericEventPointer& event);
|
2021-09-12 23:25:34 +01:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if any registered listener is listening for a particular event type.
|
|
|
|
|
*
|
|
|
|
|
* @param eventType
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
2022-03-20 17:37:36 +00:00
|
|
|
static bool isEventTypeListenedFor(Events::EventType eventType);
|
2021-10-06 21:12:31 +01:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
/**
|
|
|
|
|
* A mapping of listener IDs to registered listeners. Each registered listener is given an interger ID.
|
|
|
|
|
*/
|
2022-03-20 17:36:36 +00:00
|
|
|
static inline std::map<size_t, std::shared_ptr<EventListener>> registeredListeners;
|
|
|
|
|
static inline std::mutex registerListenerMutex;
|
2021-04-04 21:04:12 +01:00
|
|
|
};
|
|
|
|
|
}
|