#pragma once #include "utils/chain.hpp" #include "entity.hpp" #include "event.hpp" namespace game { namespace scripting { class context; class event_listener final { public: std::string event = {}; unsigned int entity_id = 0; std::function&)> callback = {}; bool is_volatile = false; }; class generic_event_listener final { public: std::string event = {}; std::function&)> callback = {}; bool is_volatile = false; }; class event_handler final { public: explicit event_handler(context* context); void dispatch(event* event); void add_event_listener(const event_listener& listener); void add_event_listener(const generic_event_listener& listener); private: context* context_; void dispatch_to_specific_listeners(event* event, const std::vector& arguments); void dispatch_to_generic_listeners(event* event, const std::vector& arguments); utils::chain event_listeners_; utils::chain generic_event_listeners_; }; } }