OGL Engine 1.2.0-dev
Loading...
Searching...
No Matches
event.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <functional>
9#include <unordered_map>
10#include <vector>
11#include <typeindex>
12#include <memory>
13
14namespace Engine::Core {
19 class Event {
20 public:
21 virtual ~Event() = default;
22 };
23
28 private:
30 using RawCallback = std::function<void(Event&)>;
35 std::unordered_map<std::type_index, std::vector<RawCallback>> mListeners;
36
37 public:
39 template<typename EventType>
40 using EventCallback = std::function<void(EventType&)>;
41
48 template<typename EventType>
50 auto& listeners = mListeners[typeid(EventType)];
51 listeners.push_back([cb = std::move(callback)](Event& e) {
52 cb(static_cast<EventType&>(e));
53 });
54 }
55
62 template<typename EventType>
63 void Emit(EventType* event) const {
64 auto it = mListeners.find(typeid(EventType));
65 if (it != mListeners.end()) {
66 for (const auto& listener : it->second) {
67 listener(*event);
68 }
69 }
70 }
71 };
72}
EventDispatcher enregistre des listeners, émet des évènements, et appelle des callbacks.
Definition event.hpp:27
void Subscribe(EventCallback< EventType > callback)
Permet d'enregistrer un callback à appeler lors de l'émission d'un évènement de type EventType.
Definition event.hpp:49
void Emit(EventType *event) const
Permet d'émettre un évènement de type EventType.
Definition event.hpp:63
std::function< void(EventType &)> EventCallback
Spécifie un nom pour les fonctions de callbacks typés (par event)
Definition event.hpp:40
Classe Event dont tous les évènements devront hériter dans le système. Permet simplement de rendre le...
Definition event.hpp:19
virtual ~Event()=default
Definition event.cpp:3