aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api/EventManager.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/api/EventManager.hpp')
-rw-r--r--src/crepe/api/EventManager.hpp36
1 files changed, 12 insertions, 24 deletions
diff --git a/src/crepe/api/EventManager.hpp b/src/crepe/api/EventManager.hpp
index b2a94bd..a5f4556 100644
--- a/src/crepe/api/EventManager.hpp
+++ b/src/crepe/api/EventManager.hpp
@@ -1,9 +1,12 @@
+#pragma once
+
#include "EventManager.h"
namespace crepe {
template <typename EventType>
-subscription_t EventManager::subscribe(const EventHandler<EventType> & callback, int channel) {
+subscription_t EventManager::subscribe(const EventHandler<EventType> & callback,
+ event_channel_t channel) {
subscription_counter++;
std::type_index event_type = typeid(EventType);
std::unique_ptr<EventHandlerWrapper<EventType>> handler
@@ -15,34 +18,19 @@ subscription_t EventManager::subscribe(const EventHandler<EventType> & callback,
}
template <typename EventType>
-void EventManager::queue_event(const EventType & event, int channel) {
+void EventManager::queue_event(const EventType & event, event_channel_t channel) {
static_assert(std::is_base_of<Event, EventType>::value,
"EventType must derive from Event");
- std::type_index event_type = typeid(EventType);
-
- auto event_ptr = std::make_unique<EventType>(event);
-
- this->events_queue.push_back(
- QueueEntry{.event = std::move(event_ptr), .channel = channel, .type = event_type});
+ this->events_queue.push_back(QueueEntry{
+ .event = std::make_unique<EventType>(event),
+ .channel = channel,
+ .type = typeid(EventType),
+ });
}
template <typename EventType>
-void EventManager::trigger_event(const EventType & event, int channel) {
- std::type_index event_type = typeid(EventType);
-
- auto handlers_it = this->subscribers.find(event_type);
- if (handlers_it != this->subscribers.end()) {
- const std::vector<CallbackEntry> & handlers = handlers_it->second;
-
- for (const CallbackEntry & handler : handlers) {
- if (handler.channel != channel && handler.channel != CHANNEL_ALL) {
- continue;
- }
- if (handler.callback->exec(event)) {
- break;
- }
- }
- }
+void EventManager::trigger_event(const EventType & event, event_channel_t channel) {
+ this->handle_event(typeid(EventType), channel, event);
}
} // namespace crepe