#ifndef CREATURELIB_EVENTHOOK_HPP #define CREATURELIB_EVENTHOOK_HPP #include #include "EventData.hpp" #define EVENT_HOOK_FUNC(name) void (*name)(const EventData*) namespace CreatureLib::Battling { /// The Event Hook class allows users to write consumers for the battle events, for example to write User Interfaces /// for it. class EventHook { std::vector _listeners; public: void RegisterListener(EVENT_HOOK_FUNC(func)) { _listeners.push_back(func); } void TriggerEvent(EventData* eventData) const { AssertNotNull(eventData) for (auto listener : _listeners) { listener(eventData); } delete eventData; } }; } #endif // CREATURELIB_EVENTHOOK_HPP