diff options
Diffstat (limited to 'mwe/events')
24 files changed, 416 insertions, 438 deletions
diff --git a/mwe/events/include/event.h b/mwe/events/include/event.h index 62d8974..16c75bf 100644 --- a/mwe/events/include/event.h +++ b/mwe/events/include/event.h @@ -6,8 +6,6 @@ #include <string> #include <unordered_map> #include <variant> -#include "keyCodes.h" -#include "customTypes.h" class UUIDGenerator { public: static std::uint32_t getUniqueID() { @@ -66,16 +64,16 @@ public: }; class MouseClickEvent : public Event { public: - MouseClickEvent(int x, int y, MouseButton button); - + MouseClickEvent(int x, int y, MouseButton button); + REGISTER_EVENT_TYPE("KeyClickedEvent"); std::pair<int, int> getMousePosition() const; - MouseButton getButton() const { return button; } + MouseButton getButton() const { return button; } private: - int mouseX = 0; + int mouseX = 0; int mouseY = 0; - MouseButton button; + MouseButton button; }; // KeyReleasedEvent class class KeyReleasedEvent : public Event { @@ -112,6 +110,7 @@ public: std::pair<int, int> getMousePosition() const; MouseButton getMouseButton() const; + private: int mouseX = 0; int mouseY = 0; @@ -124,6 +123,7 @@ public: REGISTER_EVENT_TYPE(MouseMovedEvent) std::pair<int, int> getMousePosition() const; + private: int mouseX = 0; int mouseY = 0; @@ -141,20 +141,20 @@ private: }; class TextSubmitEvent : public Event { public: - TextSubmitEvent(std::string submittedText); + TextSubmitEvent(std::string submittedText); - REGISTER_EVENT_TYPE(TextSubmitEvent) + REGISTER_EVENT_TYPE(TextSubmitEvent) - std::string getText() const; + std::string getText() const; private: - std::string text; + std::string text; }; class ShutDownEvent : public Event { public: - ShutDownEvent() : Event("ShutDownEvent"){}; + ShutDownEvent() : Event("ShutDownEvent") {}; - REGISTER_EVENT_TYPE(ShutDownEvent) + REGISTER_EVENT_TYPE(ShutDownEvent) private: }; diff --git a/mwe/events/include/eventHandler.h b/mwe/events/include/eventHandler.h index 7d8f20a..aa8f63b 100644 --- a/mwe/events/include/eventHandler.h +++ b/mwe/events/include/eventHandler.h @@ -3,7 +3,6 @@ #include <functional> #include <iostream> - template <typename EventType> using EventHandler = std::function<void(const EventType & e)>; diff --git a/mwe/events/include/gameObject.h b/mwe/events/include/gameObject.h index de5f3fe..48e239b 100644 --- a/mwe/events/include/gameObject.h +++ b/mwe/events/include/gameObject.h @@ -3,7 +3,7 @@ #include <string> class GameObject { public: - GameObject(){} + GameObject() {} // template <typename... Args> // void addSpriteComponent(Args &&... args); diff --git a/mwe/events/include/iKeyListener.h b/mwe/events/include/iKeyListener.h index 5f39ece..5fee2eb 100644 --- a/mwe/events/include/iKeyListener.h +++ b/mwe/events/include/iKeyListener.h @@ -1,21 +1,20 @@ #pragma once #include "event.h" -#include "eventManager.h" #include "eventHandler.h" +#include "eventManager.h" class IKeyListener { public: - virtual ~IKeyListener(); - virtual void onKeyPressed(const KeyPressedEvent& event) = 0; - virtual void onKeyReleased(const KeyReleasedEvent& event) = 0; + virtual ~IKeyListener(); + virtual void onKeyPressed(const KeyPressedEvent & event) = 0; + virtual void onKeyReleased(const KeyReleasedEvent & event) = 0; protected: - void subscribeEvents(int listenerId = 0); - void unsubscribeEvents(int listenerId = 0); + void subscribeEvents(int listenerId = 0); + void unsubscribeEvents(int listenerId = 0); void activate(int listenerId = 0) { subscribeEvents(listenerId); } - void deactivate(int listenerId = 0) { unsubscribeEvents(listenerId); } + void deactivate(int listenerId = 0) { unsubscribeEvents(listenerId); } private: - EventHandler<KeyPressedEvent> keyPressedHandler; - EventHandler<KeyReleasedEvent> keyReleasedHandler; + EventHandler<KeyPressedEvent> keyPressedHandler; + EventHandler<KeyReleasedEvent> keyReleasedHandler; }; - diff --git a/mwe/events/include/iMouseListener.h b/mwe/events/include/iMouseListener.h index 7d840c1..5b1181c 100644 --- a/mwe/events/include/iMouseListener.h +++ b/mwe/events/include/iMouseListener.h @@ -5,19 +5,20 @@ class IMouseListener { public: - virtual ~IMouseListener(); + virtual ~IMouseListener(); + + virtual void onMouseClicked(const MouseClickEvent & event) = 0; + virtual void onMousePressed(const MousePressedEvent & event) = 0; + virtual void onMouseReleased(const MouseReleasedEvent & event) = 0; + virtual void onMouseMoved(const MouseMovedEvent & event) = 0; - virtual void onMouseClicked(const MouseClickEvent& event) = 0; - virtual void onMousePressed(const MousePressedEvent& event) = 0; - virtual void onMouseReleased(const MouseReleasedEvent& event) = 0; - virtual void onMouseMoved(const MouseMovedEvent& event) = 0; protected: - void subscribeEvents(int listenerId = 0); - void unsubscribeEvents(int listenerId = 0); + void subscribeEvents(int listenerId = 0); + void unsubscribeEvents(int listenerId = 0); private: - EventHandler<MouseClickEvent> mouseClickHandler; - EventHandler<MousePressedEvent> mousePressHandler; - EventHandler<MouseReleasedEvent> mouseReleaseHandler; - EventHandler<MouseMovedEvent> mouseMoveHandler; + EventHandler<MouseClickEvent> mouseClickHandler; + EventHandler<MousePressedEvent> mousePressHandler; + EventHandler<MouseReleasedEvent> mouseReleaseHandler; + EventHandler<MouseMovedEvent> mouseMoveHandler; }; diff --git a/mwe/events/include/inputSystem.h b/mwe/events/include/inputSystem.h index c20562d..3e53b7c 100644 --- a/mwe/events/include/inputSystem.h +++ b/mwe/events/include/inputSystem.h @@ -1,24 +1,23 @@ #pragma once -#include <vector> -#include "uiObject.h" #include "event.h" -#include "keyCodes.h" #include "eventManager.h" +#include "keyCodes.h" +#include "uiObject.h" +#include <vector> class InputSystem { public: - InputSystem(); - void registerButton(Button* button); - void registerText(Text* label); - void registerTextInput(TextInput* input); - void processInput(); + InputSystem(); + void registerButton(Button * button); + void registerText(Text * label); + void registerTextInput(TextInput * input); + void processInput(); private: - std::vector<Button*> buttons; - std::vector<TextInput*> textInputs; - std::vector<Text*> texts; - void processMouseClick(int mouseX, int mouseY); + std::vector<Button *> buttons; + std::vector<TextInput *> textInputs; + std::vector<Text *> texts; + void processMouseClick(int mouseX, int mouseY); void processInputField(int mouseX, int mouseY); void processKeyPress(Keycode); - void processTextInput(const std::string& text); - + void processTextInput(const std::string & text); }; diff --git a/mwe/events/include/keyCodes.h b/mwe/events/include/keyCodes.h index 61deba2..73ba1cd 100644 --- a/mwe/events/include/keyCodes.h +++ b/mwe/events/include/keyCodes.h @@ -4,14 +4,14 @@ #include <unordered_map> using Keycode = uint16_t; enum class MouseButton { - None = 0, - Left_Mouse = 1, - Right_Mouse = 2, - Middle_Mouse = 3, - X1_Mouse = 4, - X2_Mouse = 5, - Scroll_Up = 6, - Scroll_Down = 7, + None = 0, + Left_Mouse = 1, + Right_Mouse = 2, + Middle_Mouse = 3, + X1_Mouse = 4, + X2_Mouse = 5, + Scroll_Up = 6, + Scroll_Down = 7, }; enum : Keycode { // From glfw3.h diff --git a/mwe/events/include/keyListenerTest.h b/mwe/events/include/keyListenerTest.h index 5990cd1..08f3feb 100644 --- a/mwe/events/include/keyListenerTest.h +++ b/mwe/events/include/keyListenerTest.h @@ -4,9 +4,9 @@ class KeyListenerTest : public IKeyListener { public: - KeyListenerTest(int listenerId); - ~KeyListenerTest(); + KeyListenerTest(int listenerId); + ~KeyListenerTest(); - void onKeyPressed(const KeyPressedEvent& event) override; - void onKeyReleased(const KeyReleasedEvent& event) override; + void onKeyPressed(const KeyPressedEvent & event) override; + void onKeyReleased(const KeyReleasedEvent & event) override; }; diff --git a/mwe/events/include/loopManager.h b/mwe/events/include/loopManager.h index 289ff0f..9959c94 100644 --- a/mwe/events/include/loopManager.h +++ b/mwe/events/include/loopManager.h @@ -5,10 +5,10 @@ //#include "combinedEvent.h" #include "eventHandler.h" #include "eventManager.h" +#include "inputSystem.h" #include "loopManager.h" -#include "uiRenderer.h" #include "uiObject.h" -#include "inputSystem.h" +#include "uiRenderer.h" #include <memory> class LoopManager { public: @@ -23,7 +23,7 @@ private: void lateUpdate(); void fixedUpdate(); void render(); - void onShutdown(const ShutDownEvent& e); + void onShutdown(const ShutDownEvent & e); bool gameRunning = false; WindowManager window; int timeScale = 1; diff --git a/mwe/events/include/mouseListenerTest.h b/mwe/events/include/mouseListenerTest.h index dae04f5..ca9afc5 100644 --- a/mwe/events/include/mouseListenerTest.h +++ b/mwe/events/include/mouseListenerTest.h @@ -4,11 +4,11 @@ class MouseListenerTest : public IMouseListener { public: - MouseListenerTest(int listenerId); - ~MouseListenerTest(); + MouseListenerTest(int listenerId); + ~MouseListenerTest(); - void onMouseClicked(const MouseClickEvent& event) override; - void onMousePressed(const MousePressedEvent& event) override; - void onMouseReleased(const MouseReleasedEvent& event) override; - void onMouseMoved(const MouseMovedEvent& event) override; + void onMouseClicked(const MouseClickEvent & event) override; + void onMousePressed(const MousePressedEvent & event) override; + void onMouseReleased(const MouseReleasedEvent & event) override; + void onMouseMoved(const MouseMovedEvent & event) override; }; diff --git a/mwe/events/include/uiObject.h b/mwe/events/include/uiObject.h index 893232d..23efe44 100644 --- a/mwe/events/include/uiObject.h +++ b/mwe/events/include/uiObject.h @@ -1,70 +1,68 @@ #pragma once +#include "event.h" +#include "eventHandler.h" #include "gameObject.h" #include <SDL2/SDL.h> #include <SDL_ttf.h> -#include "event.h" -#include "eventHandler.h" #include <functional> struct Alignment { - enum class Horizontal { LEFT, CENTER, RIGHT }; - enum class Vertical { TOP, MIDDLE, BOTTOM }; - enum class PositioningMode { RELATIVE, STATIC,ABSOLUTE }; + enum class Horizontal { LEFT, CENTER, RIGHT }; + enum class Vertical { TOP, MIDDLE, BOTTOM }; + enum class PositioningMode { RELATIVE, STATIC, ABSOLUTE }; - Horizontal horizontal = Horizontal::CENTER; - Vertical vertical = Vertical::MIDDLE; - PositioningMode mode = PositioningMode::RELATIVE; + Horizontal horizontal = Horizontal::CENTER; + Vertical vertical = Vertical::MIDDLE; + PositioningMode mode = PositioningMode::RELATIVE; - int staticX = 0; - int staticY = 0; + int staticX = 0; + int staticY = 0; - int marginTop = 0; - int marginBottom = 0; - int marginLeft = 0; - int marginRight = 0; + int marginTop = 0; + int marginBottom = 0; + int marginLeft = 0; + int marginRight = 0; }; -struct RGBColor{ +struct RGBColor { int red; int green; int blue; }; -class UIObject : public GameObject{ - public: - UIObject(int width,int height); +class UIObject : public GameObject { +public: + UIObject(int width, int height); virtual ~UIObject() {} int width; int height; int x; int y; }; -class Button : public UIObject{ - public: - Button(int width,int height); +class Button : public UIObject { +public: + Button(int width, int height); RGBColor color; std::function<void()> onClick; - }; -class Text : public UIObject{ - public: - Text(int width,int height); +class Text : public UIObject { +public: + Text(int width, int height); std::string text; int size; Alignment alignment; //font resource - TTF_Font *font; + TTF_Font * font; RGBColor color; }; class TextInput : public UIObject { public: - TextInput(int width, int height); - std::string textBuffer; - std::string placeholder; - bool isActive = false; - RGBColor textColor; - RGBColor backgroundColor; - size_t maxLength = 100; - Alignment alignment; - TTF_Font* font = nullptr; - std::function<void()> onSubmit; - std::function<void()> onFocus; + TextInput(int width, int height); + std::string textBuffer; + std::string placeholder; + bool isActive = false; + RGBColor textColor; + RGBColor backgroundColor; + size_t maxLength = 100; + Alignment alignment; + TTF_Font * font = nullptr; + std::function<void()> onSubmit; + std::function<void()> onFocus; }; - diff --git a/mwe/events/include/uiRenderer.h b/mwe/events/include/uiRenderer.h index 32acecf..8f22fdf 100644 --- a/mwe/events/include/uiRenderer.h +++ b/mwe/events/include/uiRenderer.h @@ -1,21 +1,21 @@ #pragma once +#include "uiObject.h" #include <SDL2/SDL.h> #include <SDL2/SDL_ttf.h> #include <string> -#include "uiObject.h" class UIRenderer { public: - UIRenderer(SDL_Renderer* renderer); - ~UIRenderer(); + UIRenderer(SDL_Renderer * renderer); + ~UIRenderer(); - void render(UIObject* uiObject); + void render(UIObject * uiObject); private: - SDL_Renderer* renderer; - TTF_Font* font; + SDL_Renderer * renderer; + TTF_Font * font; - void renderButton(Button* button); - void renderText(Text* text); - void renderTextInput(TextInput* textInput); + void renderButton(Button * button); + void renderText(Text * text); + void renderTextInput(TextInput * textInput); }; diff --git a/mwe/events/include/window.h b/mwe/events/include/window.h index 3c34d4c..bd75c4a 100644 --- a/mwe/events/include/window.h +++ b/mwe/events/include/window.h @@ -1,27 +1,27 @@ #pragma once -#include <SDL2/SDL.h> -#include <vector> #include "uiObject.h" #include "uiRenderer.h" +#include <SDL2/SDL.h> +#include <vector> class WindowManager { public: - WindowManager(); - virtual ~WindowManager(); + WindowManager(); + virtual ~WindowManager(); - bool initWindow(); - void destroyWindow(); - SDL_Renderer* getRenderer(); + bool initWindow(); + void destroyWindow(); + SDL_Renderer * getRenderer(); - void addUIObject(UIObject* uiObject); - void renderUIObjects(); + void addUIObject(UIObject * uiObject); + void renderUIObjects(); private: - const int SCREEN_WIDTH = 800; - const int SCREEN_HEIGHT = 600; - SDL_Window* window = nullptr; - SDL_Renderer* renderer = nullptr; + const int SCREEN_WIDTH = 800; + const int SCREEN_HEIGHT = 600; + SDL_Window * window = nullptr; + SDL_Renderer * renderer = nullptr; - UIRenderer* uiRenderer; - std::vector<UIObject*> uiObjects; + UIRenderer * uiRenderer; + std::vector<UIObject *> uiObjects; }; diff --git a/mwe/events/src/event.cpp b/mwe/events/src/event.cpp index eae4d14..0c9f3ed 100644 --- a/mwe/events/src/event.cpp +++ b/mwe/events/src/event.cpp @@ -51,27 +51,20 @@ Collision CollisionEvent::getCollisionData() const { return this->collisionData; } -TextSubmitEvent::TextSubmitEvent(std::string text) - : text(text), Event("TextSubmitEvent") { - - } +TextSubmitEvent::TextSubmitEvent(std::string text) + : text(text), Event("TextSubmitEvent") {} -std::string TextSubmitEvent::getText() const { - return this->text; -} - -MouseReleasedEvent::MouseReleasedEvent(int x, int y, MouseButton button) : mouseX(x), mouseY(y), button(button),Event("MouseReleased"){ - -} -std::pair<int, int> MouseReleasedEvent::getMousePosition() const{ - return {mouseX,mouseY}; -} -MouseClickEvent::MouseClickEvent(int x,int y,MouseButton button) : mouseX(x), mouseY(y), button(button),Event("MouseClickEvent"){ - -} -MouseMovedEvent::MouseMovedEvent(int x, int y) : mouseX(x), mouseY(y),Event("MouseMovedEvent"){ +std::string TextSubmitEvent::getText() const { return this->text; } +MouseReleasedEvent::MouseReleasedEvent(int x, int y, MouseButton button) + : mouseX(x), mouseY(y), button(button), Event("MouseReleased") {} +std::pair<int, int> MouseReleasedEvent::getMousePosition() const { + return {mouseX, mouseY}; } +MouseClickEvent::MouseClickEvent(int x, int y, MouseButton button) + : mouseX(x), mouseY(y), button(button), Event("MouseClickEvent") {} +MouseMovedEvent::MouseMovedEvent(int x, int y) + : mouseX(x), mouseY(y), Event("MouseMovedEvent") {} std::pair<int, int> MouseClickEvent::getMousePosition() const { return {mouseX, mouseY}; } diff --git a/mwe/events/src/iKeyListener.cpp b/mwe/events/src/iKeyListener.cpp index 59cc89a..0235fab 100644 --- a/mwe/events/src/iKeyListener.cpp +++ b/mwe/events/src/iKeyListener.cpp @@ -1,18 +1,19 @@ #include "iKeyListener.h" -IKeyListener::~IKeyListener() { - unsubscribeEvents(); -} +IKeyListener::~IKeyListener() { unsubscribeEvents(); } void IKeyListener::subscribeEvents(int listenerId) { - keyPressedHandler = [this](const KeyPressedEvent& event) { this->onKeyPressed(event); }; - keyReleasedHandler = [this](const KeyReleasedEvent& event) { this->onKeyReleased(event); }; + keyPressedHandler + = [this](const KeyPressedEvent & event) { this->onKeyPressed(event); }; + keyReleasedHandler = [this](const KeyReleasedEvent & event) { + this->onKeyReleased(event); + }; - subscribe<KeyPressedEvent>(keyPressedHandler, listenerId); - subscribe<KeyReleasedEvent>(keyReleasedHandler, listenerId); + subscribe<KeyPressedEvent>(keyPressedHandler, listenerId); + subscribe<KeyReleasedEvent>(keyReleasedHandler, listenerId); } void IKeyListener::unsubscribeEvents(int listenerId) { - unsubscribe<KeyPressedEvent>(keyPressedHandler, listenerId); - unsubscribe<KeyReleasedEvent>(keyReleasedHandler, listenerId); + unsubscribe<KeyPressedEvent>(keyPressedHandler, listenerId); + unsubscribe<KeyReleasedEvent>(keyReleasedHandler, listenerId); } diff --git a/mwe/events/src/iMouseListener.cpp b/mwe/events/src/iMouseListener.cpp index 3239304..69d8c9f 100644 --- a/mwe/events/src/iMouseListener.cpp +++ b/mwe/events/src/iMouseListener.cpp @@ -1,23 +1,28 @@ #include "iMouseListener.h" -IMouseListener::~IMouseListener() { - unsubscribeEvents(); -} +IMouseListener::~IMouseListener() { unsubscribeEvents(); } void IMouseListener::subscribeEvents(int listenerId) { - mouseClickHandler = [this](const MouseClickEvent& event) { this->onMouseClicked(event); }; - mousePressHandler = [this](const MousePressedEvent& event) { this->onMousePressed(event); }; - mouseReleaseHandler = [this](const MouseReleasedEvent& event) { this->onMouseReleased(event); }; - mouseMoveHandler = [this](const MouseMovedEvent& event) { this->onMouseMoved(event); }; + mouseClickHandler = [this](const MouseClickEvent & event) { + this->onMouseClicked(event); + }; + mousePressHandler = [this](const MousePressedEvent & event) { + this->onMousePressed(event); + }; + mouseReleaseHandler = [this](const MouseReleasedEvent & event) { + this->onMouseReleased(event); + }; + mouseMoveHandler + = [this](const MouseMovedEvent & event) { this->onMouseMoved(event); }; - subscribe<MouseClickEvent>(mouseClickHandler, listenerId); - subscribe<MousePressedEvent>(mousePressHandler, listenerId); - subscribe<MouseReleasedEvent>(mouseReleaseHandler, listenerId); - subscribe<MouseMovedEvent>(mouseMoveHandler, listenerId); + subscribe<MouseClickEvent>(mouseClickHandler, listenerId); + subscribe<MousePressedEvent>(mousePressHandler, listenerId); + subscribe<MouseReleasedEvent>(mouseReleaseHandler, listenerId); + subscribe<MouseMovedEvent>(mouseMoveHandler, listenerId); } void IMouseListener::unsubscribeEvents(int listenerId) { - unsubscribe<MouseClickEvent>(mouseClickHandler, listenerId); - unsubscribe<MousePressedEvent>(mousePressHandler, listenerId); - unsubscribe<MouseReleasedEvent>(mouseReleaseHandler, listenerId); - unsubscribe<MouseMovedEvent>(mouseMoveHandler, listenerId); + unsubscribe<MouseClickEvent>(mouseClickHandler, listenerId); + unsubscribe<MousePressedEvent>(mousePressHandler, listenerId); + unsubscribe<MouseReleasedEvent>(mouseReleaseHandler, listenerId); + unsubscribe<MouseMovedEvent>(mouseMoveHandler, listenerId); } diff --git a/mwe/events/src/inputSystem.cpp b/mwe/events/src/inputSystem.cpp index bb26e8b..b87b12e 100644 --- a/mwe/events/src/inputSystem.cpp +++ b/mwe/events/src/inputSystem.cpp @@ -2,98 +2,94 @@ InputSystem::InputSystem() {} -void InputSystem::registerButton(Button* button) { - buttons.push_back(button); -} -void InputSystem::registerTextInput(TextInput* input) { - textInputs.push_back(input); -} -void InputSystem::registerText(Text* label) { - texts.push_back(label); +void InputSystem::registerButton(Button * button) { buttons.push_back(button); } +void InputSystem::registerTextInput(TextInput * input) { + textInputs.push_back(input); } +void InputSystem::registerText(Text * label) { texts.push_back(label); } void InputSystem::processInput() { - SDL_Event event; - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - triggerEvent(ShutDownEvent()); - break; - case SDL_KEYDOWN: - triggerEvent(KeyPressedEvent(getCustomKey(event.key.keysym.sym))); - processKeyPress(event.key.keysym.sym); - break; - case SDL_TEXTINPUT: - // Process typed characters - processTextInput(event.text.text); - break; - case SDL_MOUSEBUTTONDOWN: { - int mouseX, mouseY; - SDL_GetMouseState(&mouseX, &mouseY); - processMouseClick(mouseX, mouseY); - triggerEvent(MousePressedEvent(mouseX, mouseY)); - break; - } - } - } + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + triggerEvent(ShutDownEvent()); + break; + case SDL_KEYDOWN: + triggerEvent( + KeyPressedEvent(getCustomKey(event.key.keysym.sym))); + processKeyPress(event.key.keysym.sym); + break; + case SDL_TEXTINPUT: + // Process typed characters + processTextInput(event.text.text); + break; + case SDL_MOUSEBUTTONDOWN: { + int mouseX, mouseY; + SDL_GetMouseState(&mouseX, &mouseY); + processMouseClick(mouseX, mouseY); + triggerEvent(MousePressedEvent(mouseX, mouseY)); + break; + } + } + } } - void InputSystem::processMouseClick(int mouseX, int mouseY) { - for (auto* button : buttons) { - if (mouseX >= button->x && mouseX <= (button->x + button->width) && - mouseY >= button->y && mouseY <= (button->y + button->height)) { - button->onClick(); - } - } - for(auto* textInput : textInputs){ - if (mouseX >= textInput->x && mouseX <= textInput->x + textInput->width && - mouseY >= textInput->y && mouseY <= textInput->y + textInput->height) { - textInput->isActive = true; - } else { - textInput->isActive = false; - } + for (auto * button : buttons) { + if (mouseX >= button->x && mouseX <= (button->x + button->width) + && mouseY >= button->y && mouseY <= (button->y + button->height)) { + button->onClick(); + } + } + for (auto * textInput : textInputs) { + if (mouseX >= textInput->x && mouseX <= textInput->x + textInput->width + && mouseY >= textInput->y + && mouseY <= textInput->y + textInput->height) { + textInput->isActive = true; + } else { + textInput->isActive = false; + } } } void InputSystem::processKeyPress(Keycode key) { - // for (auto* textInput : textInputs) { - // if (textInput->isActive) { - // if (key == SDLK_RETURN || key == SDLK_KP_ENTER) { - // // Submit the text - // if (textInput->onSubmit) { - // textInput->onSubmit(); - // } - // } - // else if (key == SDLK_BACKSPACE) { - // // Handle backspace - // if (!textInput->textBuffer.empty() && textInput->caretPosition > 0) { - // textInput->textBuffer.erase(textInput->caretPosition - 1, 1); - // textInput->caretPosition--; - // } - // } - // else if (key == SDLK_LEFT) { - // // Move caret left - // if (textInput->caretPosition > 0) { - // textInput->caretPosition--; - // } - // } - // else if (key == SDLK_RIGHT) { - // // Move caret right - // if (textInput->caretPosition < textInput->textBuffer.size()) { - // textInput->caretPosition++; - // } - // } - // } - // } + // for (auto* textInput : textInputs) { + // if (textInput->isActive) { + // if (key == SDLK_RETURN || key == SDLK_KP_ENTER) { + // // Submit the text + // if (textInput->onSubmit) { + // textInput->onSubmit(); + // } + // } + // else if (key == SDLK_BACKSPACE) { + // // Handle backspace + // if (!textInput->textBuffer.empty() && textInput->caretPosition > 0) { + // textInput->textBuffer.erase(textInput->caretPosition - 1, 1); + // textInput->caretPosition--; + // } + // } + // else if (key == SDLK_LEFT) { + // // Move caret left + // if (textInput->caretPosition > 0) { + // textInput->caretPosition--; + // } + // } + // else if (key == SDLK_RIGHT) { + // // Move caret right + // if (textInput->caretPosition < textInput->textBuffer.size()) { + // textInput->caretPosition++; + // } + // } + // } + // } } -void InputSystem::processTextInput(const std::string& text) { - // for (auto* textInput : textInputs) { - // if (textInput->isActive) { - // // Insert text at caret position - // textInput->textBuffer.insert(textInput->caretPosition, text); - // textInput->caretPosition += text.length(); - // } - // } +void InputSystem::processTextInput(const std::string & text) { + // for (auto* textInput : textInputs) { + // if (textInput->isActive) { + // // Insert text at caret position + // textInput->textBuffer.insert(textInput->caretPosition, text); + // textInput->caretPosition += text.length(); + // } + // } } - diff --git a/mwe/events/src/keyListenerTest.cpp b/mwe/events/src/keyListenerTest.cpp index 90b92a5..8446dfa 100644 --- a/mwe/events/src/keyListenerTest.cpp +++ b/mwe/events/src/keyListenerTest.cpp @@ -1,17 +1,15 @@ #include "keyListenerTest.h" KeyListenerTest::KeyListenerTest(int listenerId) { - subscribeEvents(listenerId); + subscribeEvents(listenerId); } -KeyListenerTest::~KeyListenerTest() { - unsubscribeEvents(); -} +KeyListenerTest::~KeyListenerTest() { unsubscribeEvents(); } -void KeyListenerTest::onKeyPressed(const KeyPressedEvent& event) { - std::cout << "Key pressed: " << event.getKeyCode() << std::endl; +void KeyListenerTest::onKeyPressed(const KeyPressedEvent & event) { + std::cout << "Key pressed: " << event.getKeyCode() << std::endl; } -void KeyListenerTest::onKeyReleased(const KeyReleasedEvent& event) { - std::cout << "Key released: " << event.getKeyCode() << std::endl; +void KeyListenerTest::onKeyReleased(const KeyReleasedEvent & event) { + std::cout << "Key released: " << event.getKeyCode() << std::endl; } diff --git a/mwe/events/src/loopManager.cpp b/mwe/events/src/loopManager.cpp index f673d44..0b7d888 100644 --- a/mwe/events/src/loopManager.cpp +++ b/mwe/events/src/loopManager.cpp @@ -1,8 +1,8 @@ #include "loopManager.h" -LoopManager::LoopManager() - : inputSystem(std::make_unique<InputSystem>()){ - shutdownHandler = [this](const ShutDownEvent& event) { this->onShutdown(event); }; +LoopManager::LoopManager() : inputSystem(std::make_unique<InputSystem>()) { + shutdownHandler + = [this](const ShutDownEvent & event) { this->onShutdown(event); }; subscribe(shutdownHandler); } void LoopManager::processInput() { @@ -70,22 +70,20 @@ void LoopManager::setup() { } }; subscribe<KeyPressedEvent>(closeWindowCallback, false); - Button* testButton = new Button(200,200); - testButton->color = {100,0,100}; - testButton->onClick = []() { - std::cout << "Button was clicked" << std::endl; - }; + Button * testButton = new Button(200, 200); + testButton->color = {100, 0, 100}; + testButton->onClick + = []() { std::cout << "Button was clicked" << std::endl; }; testButton->x = 200; testButton->y = 200; inputSystem->registerButton(testButton); window.addUIObject(testButton); - - TextInput* testInput = new TextInput(200,200); + TextInput * testInput = new TextInput(200, 200); testInput->x = 100; testInput->y = 100; - testInput->backgroundColor = {20,50,80}; + testInput->backgroundColor = {20, 50, 80}; inputSystem->registerTextInput(testInput); window.addUIObject(testInput); } @@ -95,7 +93,7 @@ void LoopManager::render() { window.renderUIObjects(); } } -void LoopManager::onShutdown(const ShutDownEvent& e){ +void LoopManager::onShutdown(const ShutDownEvent & e) { this->gameRunning = false; } void LoopManager::update() { diff --git a/mwe/events/src/main.cpp b/mwe/events/src/main.cpp index 972fc70..d49cf74 100644 --- a/mwe/events/src/main.cpp +++ b/mwe/events/src/main.cpp @@ -1,16 +1,13 @@ #include "customTypes.h" #include "event.h" -#include "loopManager.h" -#include <SDL2/SDL.h> -#include <iostream> -#include <memory> -#include "loopManager.h" -#include "event.h" -#include "customTypes.h" #include "iKeyListener.h" #include "iMouseListener.h" #include "keyListenerTest.h" +#include "loopManager.h" #include "mouseListenerTest.h" +#include <SDL2/SDL.h> +#include <iostream> +#include <memory> class PlayerDamagedEvent : public Event { public: PlayerDamagedEvent(int damage, int playerID) @@ -53,7 +50,7 @@ int main(int argc, char * args[]) { LoopManager gameLoop; int testListenerId = 0; KeyListenerTest keyListener(testListenerId); - MouseListenerTest mouseListener(testListenerId); + MouseListenerTest mouseListener(testListenerId); // custom event class poc subscribe<PlayerDamagedEvent>(onPlayerDamaged); triggerEvent(PlayerDamagedEvent(50, 1)); diff --git a/mwe/events/src/mouseListenerTest.cpp b/mwe/events/src/mouseListenerTest.cpp index 4b3aa3e..a2a7e6d 100644 --- a/mwe/events/src/mouseListenerTest.cpp +++ b/mwe/events/src/mouseListenerTest.cpp @@ -1,25 +1,27 @@ #include "mouseListenerTest.h" MouseListenerTest::MouseListenerTest(int listenerId) { - subscribeEvents(listenerId); + subscribeEvents(listenerId); } -MouseListenerTest::~MouseListenerTest() { - unsubscribeEvents(); -} +MouseListenerTest::~MouseListenerTest() { unsubscribeEvents(); } -void MouseListenerTest::onMouseClicked(const MouseClickEvent& event) { - std::cout << "Mouse clicked at: (" << event.getMousePosition().first << ", " << event.getMousePosition().second << ")" << std::endl; +void MouseListenerTest::onMouseClicked(const MouseClickEvent & event) { + std::cout << "Mouse clicked at: (" << event.getMousePosition().first << ", " + << event.getMousePosition().second << ")" << std::endl; } -void MouseListenerTest::onMousePressed(const MousePressedEvent& event) { - std::cout << "Mouse button pressed at: (" << event.getMousePosition().first << ", " << event.getMousePosition().second << ")" << std::endl; +void MouseListenerTest::onMousePressed(const MousePressedEvent & event) { + std::cout << "Mouse button pressed at: (" << event.getMousePosition().first + << ", " << event.getMousePosition().second << ")" << std::endl; } -void MouseListenerTest::onMouseReleased(const MouseReleasedEvent& event) { - std::cout << "Mouse button released at: (" << event.getMousePosition().first << ", " << event.getMousePosition().second << ")" << std::endl; +void MouseListenerTest::onMouseReleased(const MouseReleasedEvent & event) { + std::cout << "Mouse button released at: (" << event.getMousePosition().first + << ", " << event.getMousePosition().second << ")" << std::endl; } -void MouseListenerTest::onMouseMoved(const MouseMovedEvent& event) { - std::cout << "Mouse moved to: (" << event.getMousePosition().first << ", " << event.getMousePosition().second << ")" << std::endl; +void MouseListenerTest::onMouseMoved(const MouseMovedEvent & event) { + std::cout << "Mouse moved to: (" << event.getMousePosition().first << ", " + << event.getMousePosition().second << ")" << std::endl; } diff --git a/mwe/events/src/uiObject.cpp b/mwe/events/src/uiObject.cpp index 31ff486..8405469 100644 --- a/mwe/events/src/uiObject.cpp +++ b/mwe/events/src/uiObject.cpp @@ -1,28 +1,24 @@ #include "uiObject.h" // Constructor for UIObject -UIObject::UIObject(int width, int height) - : width(width), height(height){ - - } +UIObject::UIObject(int width, int height) : width(width), height(height) {} // Constructor for Button -Button::Button(int width, int height) - : UIObject(width, height) { -} +Button::Button(int width, int height) : UIObject(width, height) {} Text::Text(int width, int height) - : UIObject(width, height), size(12), font(nullptr), color{255, 255, 255} { // Default size and color - alignment.horizontal = Alignment::Horizontal::CENTER; - alignment.vertical = Alignment::Vertical::MIDDLE; - alignment.mode = Alignment::PositioningMode::RELATIVE; + : UIObject(width, height), size(12), font(nullptr), + color{255, 255, 255} { // Default size and color + alignment.horizontal = Alignment::Horizontal::CENTER; + alignment.vertical = Alignment::Vertical::MIDDLE; + alignment.mode = Alignment::PositioningMode::RELATIVE; } TextInput::TextInput(int width, int height) - : UIObject(width, height), textBuffer(""), placeholder(""), - isActive(false), textColor{255, 255, 255}, backgroundColor{0, 0, 0}, maxLength(100), font(nullptr) { - alignment.horizontal = Alignment::Horizontal::LEFT; - alignment.vertical = Alignment::Vertical::TOP; - alignment.mode = Alignment::PositioningMode::RELATIVE; + : UIObject(width, height), textBuffer(""), placeholder(""), isActive(false), + textColor{255, 255, 255}, backgroundColor{0, 0, 0}, maxLength(100), + font(nullptr) { + alignment.horizontal = Alignment::Horizontal::LEFT; + alignment.vertical = Alignment::Vertical::TOP; + alignment.mode = Alignment::PositioningMode::RELATIVE; } - diff --git a/mwe/events/src/uiRenderer.cpp b/mwe/events/src/uiRenderer.cpp index dbe8dfe..9fec272 100644 --- a/mwe/events/src/uiRenderer.cpp +++ b/mwe/events/src/uiRenderer.cpp @@ -1,103 +1,107 @@ #include "uiRenderer.h" // Constructor -UIRenderer::UIRenderer(SDL_Renderer* renderer) : renderer(renderer) {} +UIRenderer::UIRenderer(SDL_Renderer * renderer) : renderer(renderer) {} // Render function -void UIRenderer::render(UIObject* uiObject) { - if (Button* button = dynamic_cast<Button*>(uiObject)) { - renderButton(button); - } else if (Text* text = dynamic_cast<Text*>(uiObject)) { - renderText(text); - } else if (TextInput* textInput = dynamic_cast<TextInput*>(uiObject)) { - renderTextInput(textInput); - } +void UIRenderer::render(UIObject * uiObject) { + if (Button * button = dynamic_cast<Button *>(uiObject)) { + renderButton(button); + } else if (Text * text = dynamic_cast<Text *>(uiObject)) { + renderText(text); + } else if (TextInput * textInput = dynamic_cast<TextInput *>(uiObject)) { + renderTextInput(textInput); + } } // Private helper function to render a Button -void UIRenderer::renderButton(Button* button) { - SDL_Rect buttonRect = {button->x, button->y, button->width, button->height}; - SDL_SetRenderDrawColor(renderer, 100, 100, 255, 255); // Button color - SDL_RenderFillRect(renderer, &buttonRect); +void UIRenderer::renderButton(Button * button) { + SDL_Rect buttonRect = {button->x, button->y, button->width, button->height}; + SDL_SetRenderDrawColor(renderer, 100, 100, 255, 255); // Button color + SDL_RenderFillRect(renderer, &buttonRect); } // Private helper function to render a Text -void UIRenderer::renderText(Text* text) { - if (text->font != nullptr) { - SDL_Color sdlColor = {text->color.red, text->color.green, text->color.blue, 255}; - SDL_Surface* textSurface = TTF_RenderText_Blended(text->font, text->text.c_str(), sdlColor); - if (!textSurface) { - std::cerr << "Error creating text surface: " << TTF_GetError() << std::endl; - return; - } +void UIRenderer::renderText(Text * text) { + if (text->font != nullptr) { + SDL_Color sdlColor + = {text->color.red, text->color.green, text->color.blue, 255}; + SDL_Surface * textSurface + = TTF_RenderText_Blended(text->font, text->text.c_str(), sdlColor); + if (!textSurface) { + std::cerr << "Error creating text surface: " << TTF_GetError() + << std::endl; + return; + } - SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurface); - if (!textTexture) { - std::cerr << "Error creating texture from surface: " << SDL_GetError() << std::endl; - SDL_FreeSurface(textSurface); - return; - } + SDL_Texture * textTexture + = SDL_CreateTextureFromSurface(renderer, textSurface); + if (!textTexture) { + std::cerr << "Error creating texture from surface: " + << SDL_GetError() << std::endl; + SDL_FreeSurface(textSurface); + return; + } - SDL_Rect textRect = {text->x, text->y, textSurface->w, textSurface->h}; - SDL_RenderCopy(renderer, textTexture, nullptr, &textRect); - SDL_FreeSurface(textSurface); - SDL_DestroyTexture(textTexture); - } + SDL_Rect textRect = {text->x, text->y, textSurface->w, textSurface->h}; + SDL_RenderCopy(renderer, textTexture, nullptr, &textRect); + SDL_FreeSurface(textSurface); + SDL_DestroyTexture(textTexture); + } } -void UIRenderer::renderTextInput(TextInput* textInput) { - // // Check if textInput or renderer is null to avoid segmentation faults - // if (!textInput || !renderer) { - // std::cerr << "Error: Null pointer detected for textInput or renderer." << std::endl; - // return; - // } +void UIRenderer::renderTextInput(TextInput * textInput) { + // // Check if textInput or renderer is null to avoid segmentation faults + // if (!textInput || !renderer) { + // std::cerr << "Error: Null pointer detected for textInput or renderer." << std::endl; + // return; + // } - // // Render the background rectangle for the text input - // SDL_Rect inputRect = {textInput->x, textInput->y, textInput->width, textInput->height}; - // SDL_SetRenderDrawColor(renderer, textInput->backgroundColor.red, textInput->backgroundColor.green, textInput->backgroundColor.blue, 255); - // SDL_RenderFillRect(renderer, &inputRect); + // // Render the background rectangle for the text input + // SDL_Rect inputRect = {textInput->x, textInput->y, textInput->width, textInput->height}; + // SDL_SetRenderDrawColor(renderer, textInput->backgroundColor.red, textInput->backgroundColor.green, textInput->backgroundColor.blue, 255); + // SDL_RenderFillRect(renderer, &inputRect); - // // Check if font is valid - // if (!textInput->font) { - // std::cerr << "Error: Font is not loaded for textInput." << std::endl; - // return; - // } + // // Check if font is valid + // if (!textInput->font) { + // std::cerr << "Error: Font is not loaded for textInput." << std::endl; + // return; + // } - // SDL_Color sdlColor = {textInput->textColor.red, textInput->textColor.green, textInput->textColor.blue, 255}; + // SDL_Color sdlColor = {textInput->textColor.red, textInput->textColor.green, textInput->textColor.blue, 255}; - // if (!textInput->textBuffer.empty()) { - // // Render the text in the input field - // SDL_Surface* textSurface = TTF_RenderText_Blended(textInput->font, textInput->textBuffer.c_str(), sdlColor); - // if (textSurface) { - // SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurface); - // if (textTexture) { - // SDL_Rect textRect = {textInput->x + 5, textInput->y + 5, textSurface->w, textSurface->h}; - // SDL_RenderCopy(renderer, textTexture, nullptr, &textRect); - // SDL_DestroyTexture(textTexture); - // } else { - // std::cerr << "Error: Unable to create texture from text surface." << std::endl; - // } - // SDL_FreeSurface(textSurface); - // } else { - // std::cerr << "Error: Unable to create text surface." << std::endl; - // } - // } else if (!textInput->placeholder.empty()) { - // // Render the placeholder text - // SDL_Color placeholderColor = {128, 128, 128, 255}; // Light gray for placeholder - // SDL_Surface* placeholderSurface = TTF_RenderText_Blended(textInput->font, textInput->placeholder.c_str(), placeholderColor); - // if (placeholderSurface) { - // SDL_Texture* placeholderTexture = SDL_CreateTextureFromSurface(renderer, placeholderSurface); - // if (placeholderTexture) { - // SDL_Rect placeholderRect = {textInput->x + 5, textInput->y + 5, placeholderSurface->w, placeholderSurface->h}; - // SDL_RenderCopy(renderer, placeholderTexture, nullptr, &placeholderRect); - // SDL_DestroyTexture(placeholderTexture); - // } else { - // std::cerr << "Error: Unable to create texture from placeholder surface." << std::endl; - // } - // SDL_FreeSurface(placeholderSurface); - // } else { - // std::cerr << "Error: Unable to create placeholder surface." << std::endl; - // } - // } + // if (!textInput->textBuffer.empty()) { + // // Render the text in the input field + // SDL_Surface* textSurface = TTF_RenderText_Blended(textInput->font, textInput->textBuffer.c_str(), sdlColor); + // if (textSurface) { + // SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurface); + // if (textTexture) { + // SDL_Rect textRect = {textInput->x + 5, textInput->y + 5, textSurface->w, textSurface->h}; + // SDL_RenderCopy(renderer, textTexture, nullptr, &textRect); + // SDL_DestroyTexture(textTexture); + // } else { + // std::cerr << "Error: Unable to create texture from text surface." << std::endl; + // } + // SDL_FreeSurface(textSurface); + // } else { + // std::cerr << "Error: Unable to create text surface." << std::endl; + // } + // } else if (!textInput->placeholder.empty()) { + // // Render the placeholder text + // SDL_Color placeholderColor = {128, 128, 128, 255}; // Light gray for placeholder + // SDL_Surface* placeholderSurface = TTF_RenderText_Blended(textInput->font, textInput->placeholder.c_str(), placeholderColor); + // if (placeholderSurface) { + // SDL_Texture* placeholderTexture = SDL_CreateTextureFromSurface(renderer, placeholderSurface); + // if (placeholderTexture) { + // SDL_Rect placeholderRect = {textInput->x + 5, textInput->y + 5, placeholderSurface->w, placeholderSurface->h}; + // SDL_RenderCopy(renderer, placeholderTexture, nullptr, &placeholderRect); + // SDL_DestroyTexture(placeholderTexture); + // } else { + // std::cerr << "Error: Unable to create texture from placeholder surface." << std::endl; + // } + // SDL_FreeSurface(placeholderSurface); + // } else { + // std::cerr << "Error: Unable to create placeholder surface." << std::endl; + // } + // } } - diff --git a/mwe/events/src/window.cpp b/mwe/events/src/window.cpp index 7192e6b..f482b7f 100644 --- a/mwe/events/src/window.cpp +++ b/mwe/events/src/window.cpp @@ -1,56 +1,48 @@ #include "window.h" #include <iostream> +WindowManager::WindowManager() { this->uiRenderer = nullptr; } -WindowManager::WindowManager() { - this->uiRenderer = nullptr; -} - - -WindowManager::~WindowManager() { - destroyWindow(); -} +WindowManager::~WindowManager() { destroyWindow(); } bool WindowManager::initWindow() { - if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { - std::cerr << "Error initializing SDL.\n"; - return false; - } - - window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, - SCREEN_HEIGHT, SDL_WINDOW_SHOWN); - if (!window) { - std::cerr << "Error creating SDL Window.\n"; - return false; - } - - renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); - if (!renderer) { - std::cerr << "Error creating SDL renderer.\n"; - return false; - } - - uiRenderer = new UIRenderer(renderer); - return true; + if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { + std::cerr << "Error initializing SDL.\n"; + return false; + } + + window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, + SCREEN_HEIGHT, SDL_WINDOW_SHOWN); + if (!window) { + std::cerr << "Error creating SDL Window.\n"; + return false; + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if (!renderer) { + std::cerr << "Error creating SDL renderer.\n"; + return false; + } + + uiRenderer = new UIRenderer(renderer); + return true; } void WindowManager::destroyWindow() { - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - SDL_Quit(); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); } -SDL_Renderer* WindowManager::getRenderer() { - return renderer; -} -void WindowManager::addUIObject(UIObject* uiObject) { - uiObjects.push_back(uiObject); +SDL_Renderer * WindowManager::getRenderer() { return renderer; } +void WindowManager::addUIObject(UIObject * uiObject) { + uiObjects.push_back(uiObject); } void WindowManager::renderUIObjects() { - for (UIObject* obj : uiObjects) { - uiRenderer->render(obj); - } + for (UIObject * obj : uiObjects) { + uiRenderer->render(obj); + } SDL_RenderPresent(this->renderer); } |