#pragma once #include #include "EventManager.h" namespace crepe { template subscription_t EventManager::subscribe(const EventHandler & callback, event_channel_t channel) { subscription_counter++; std::type_index event_type = typeid(EventType); std::unique_ptr> handler = std::make_unique>(callback); std::vector & handlers = this->subscribers[event_type]; handlers.emplace_back(CallbackEntry{ .callback = std::move(handler), .channel = channel, .id = subscription_counter}); return subscription_counter; } template void EventManager::queue_event(const EventType & event, event_channel_t channel) { static_assert(std::is_base_of::value, "EventType must derive from Event"); this->events_queue.push_back(QueueEntry{ .event = std::make_unique(event), .channel = channel, .type = typeid(EventType), }); } template void EventManager::trigger_event(const EventType & event, event_channel_t channel) { this->handle_event(typeid(EventType), channel, event); } } // namespace crepe