Files
BloomPatched/src/EventManager/EventManager.hpp
2022-04-04 22:21:42 +01:00

61 lines
1.8 KiB
C++

#pragma once
#include <map>
#include <mutex>
#include "Events/Events.hpp"
#include "EventListener.hpp"
namespace Bloom
{
/**
* The static EventManager class provides a method of dispatching events to a set of listeners.
*/
class EventManager
{
public:
/**
* Registers an EventListener instance with the manager.
*
* 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.
*
* @param listenerName
*/
static void registerListener(std::shared_ptr<EventListener> listener);
/**
* Deregister an EventListener instance.
*
* @param listenerId
* The ID of the EventListener to deregister. See EventListener::getId();
*/
static void deregisterListener(size_t listenerId);
/**
* Dispatches an event to all registered listeners, if they have registered an interest in the event type.
* See EventListener::registeredEventTypes for more.
*
* @param event
*/
static void triggerEvent(const Events::SharedGenericEventPointer& event);
/**
* Checks if any registered listener is listening for a particular event type.
*
* @param eventType
* @return
*/
static bool isEventTypeListenedFor(Events::EventType eventType);
private:
/**
* A mapping of listener IDs to registered listeners. Each registered listener is given an interger ID.
*/
static inline std::map<size_t, std::shared_ptr<EventListener>> registeredListeners;
static inline std::mutex registerListenerMutex;
};
}