aboutsummaryrefslogtreecommitdiff
path: root/mwe/events/include/event.h
diff options
context:
space:
mode:
Diffstat (limited to 'mwe/events/include/event.h')
-rw-r--r--mwe/events/include/event.h167
1 files changed, 167 insertions, 0 deletions
diff --git a/mwe/events/include/event.h b/mwe/events/include/event.h
new file mode 100644
index 0000000..ee1bf52
--- /dev/null
+++ b/mwe/events/include/event.h
@@ -0,0 +1,167 @@
+#pragma once
+#include "customTypes.h"
+#include "keyCodes.h"
+#include <cstdint>
+#include <iostream>
+#include <string>
+#include <unordered_map>
+#include <variant>
+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;
+};
+class MouseClickEvent : public Event {
+public:
+ MouseClickEvent(int x, int y, MouseButton button);
+
+ REGISTER_EVENT_TYPE("KeyClickedEvent");
+ std::pair<int, int> getMousePosition() const;
+ MouseButton getButton() const { return button; }
+
+private:
+ int mouseX = 0;
+ int mouseY = 0;
+ MouseButton button;
+};
+// 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;
+ MouseButton button;
+};
+class MouseReleasedEvent : public Event {
+public:
+ MouseReleasedEvent(int mouseX, int mouseY, MouseButton button);
+
+ REGISTER_EVENT_TYPE(MouseReleasedEvent)
+
+ std::pair<int, int> getMousePosition() const;
+ MouseButton getMouseButton() const;
+
+private:
+ int mouseX = 0;
+ int mouseY = 0;
+ MouseButton button;
+};
+class MouseMovedEvent : public Event {
+public:
+ MouseMovedEvent(int mouseX, int mouseY);
+
+ REGISTER_EVENT_TYPE(MouseMovedEvent)
+
+ 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;
+};
+class TextSubmitEvent : public Event {
+public:
+ TextSubmitEvent(std::string submittedText);
+
+ REGISTER_EVENT_TYPE(TextSubmitEvent)
+
+ std::string getText() const;
+
+private:
+ std::string text;
+};
+class ShutDownEvent : public Event {
+public:
+ ShutDownEvent() : Event("ShutDownEvent") {};
+
+ REGISTER_EVENT_TYPE(ShutDownEvent)
+
+private:
+};
+// class ButtonClickEvent : public Event {
+// public:
+// ButtonClickEvent(int x,int y,int width,int height);
+
+// REGISTER_EVENT_TYPE(TextSubmitEvent)
+
+// std::string getText() const;
+
+// private:
+// std::string text;
+// };