From ed8534e2d150428bcbc4a6df8940323ae8db2925 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Sun, 3 Nov 2024 10:49:19 +0100 Subject: fixed gameloop double window and event poc is working again --- mwe/events/src/inputSystem.cpp | 62 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) (limited to 'mwe/events/src/inputSystem.cpp') diff --git a/mwe/events/src/inputSystem.cpp b/mwe/events/src/inputSystem.cpp index ffab84b..bb26e8b 100644 --- a/mwe/events/src/inputSystem.cpp +++ b/mwe/events/src/inputSystem.cpp @@ -5,9 +5,14 @@ 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::processInput() { - SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { @@ -16,6 +21,11 @@ void InputSystem::processInput() { 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; @@ -28,6 +38,7 @@ void InputSystem::processInput() { } } + void InputSystem::processMouseClick(int mouseX, int mouseY) { for (auto* button : buttons) { if (mouseX >= button->x && mouseX <= (button->x + button->width) && @@ -35,5 +46,54 @@ void InputSystem::processMouseClick(int mouseX, int mouseY) { 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++; + // } + // } + // } + // } +} + +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(); + // } + // } } -- cgit v1.2.3