blob: 02080851b845aea669abba2e50e8ea6390bae47c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#pragma once
#include "keyCodes.h"
#include <cstdint>
#include <iostream>
#include <string>
#include <unordered_map>
#include <variant>
#include "keyCodes.h"
#include "customTypes.h"
class UUIDGenerator {
public:
static std::uint32_t getUniqueID() {
static std::uint32_t id = 0;
return ++id;
}
};
#define REGISTER_EVENT_TYPE(ClassName) \
\
public: \
static std::uint32_t getStaticEventType() { \
static std::uint32_t typeID = UUIDGenerator::getUniqueID(); \
return typeID; \
} \
virtual std::uint32_t getEventType() const override { \
return getStaticEventType(); \
}
class Event {
public:
Event(std::string eventType);
virtual ~Event() = default;
virtual std::uint32_t getEventType() const = 0;
virtual std::string toString() const;
void addArgument(const std::string & key,
const std::variant<int, std::string, float> & value);
std::variant<int, std::string, float>
getArgument(const std::string & key) const;
std::string getType() const;
bool getHandled() const;
void markHandled();
private:
std::unordered_map<std::string, std::variant<int, std::string, float>>
eventData;
bool isHandled = false;
};
// KeyPressedEvent class
class KeyPressedEvent : public Event {
public:
KeyPressedEvent(int keyCode);
REGISTER_EVENT_TYPE("KeyPressedEvent");
Keycode getKeyCode() const;
int getRepeatCount() const;
private:
Keycode keycode;
public:
Keycode key = 0;
int repeatCount = 0;
};
// KeyReleasedEvent class
class KeyReleasedEvent : public Event {
public:
KeyReleasedEvent(int keyCode);
REGISTER_EVENT_TYPE(KeyReleasedEvent);
Keycode getKeyCode() const;
private:
Keycode key = 0;
};
// MousePressedEvent class
class MousePressedEvent : public Event {
public:
MousePressedEvent(int mouseX, int mouseY);
REGISTER_EVENT_TYPE(MousePressedEvent)
std::pair<int, int> getMousePosition() const;
private:
int mouseX = 0;
int mouseY = 0;
};
class CollisionEvent : public Event {
public:
CollisionEvent(Collision);
REGISTER_EVENT_TYPE(CollisionEvent)
Collision getCollisionData() const;
private:
Collision collisionData;
};
|