aboutsummaryrefslogtreecommitdiff
path: root/mwe/events/src
diff options
context:
space:
mode:
Diffstat (limited to 'mwe/events/src')
-rw-r--r--mwe/events/src/inputSystem.cpp62
-rw-r--r--mwe/events/src/loopManager.cpp8
-rw-r--r--mwe/events/src/main.cpp18
-rw-r--r--mwe/events/src/uiObject.cpp2
-rw-r--r--mwe/events/src/uiRenderer.cpp75
-rw-r--r--mwe/events/src/window.cpp1
6 files changed, 124 insertions, 42 deletions
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();
+ // }
+ // }
}
diff --git a/mwe/events/src/loopManager.cpp b/mwe/events/src/loopManager.cpp
index 83ccfc3..f673d44 100644
--- a/mwe/events/src/loopManager.cpp
+++ b/mwe/events/src/loopManager.cpp
@@ -80,6 +80,14 @@ void LoopManager::setup() {
inputSystem->registerButton(testButton);
window.addUIObject(testButton);
+
+
+ TextInput* testInput = new TextInput(200,200);
+ testInput->x = 100;
+ testInput->y = 100;
+ testInput->backgroundColor = {20,50,80};
+ inputSystem->registerTextInput(testInput);
+ window.addUIObject(testInput);
}
void LoopManager::render() {
//fprintf(stderr, "**********render********** \n");
diff --git a/mwe/events/src/main.cpp b/mwe/events/src/main.cpp
index 03dff16..8fd6d10 100644
--- a/mwe/events/src/main.cpp
+++ b/mwe/events/src/main.cpp
@@ -40,7 +40,7 @@ void onKeyPressed(const KeyPressedEvent& e)
fprintf(stderr,"second function KeyCode %d\n",keyCode);
}
void CollisionHandler(const CollisionEvent& e){
- std::cout << "collision betwee object id: "<< e.getCollisionData().objectIdA << " and id: " << e.getCollisionData().objectIdB << std::endl;
+ std::cout << "collision between object id: "<< e.getCollisionData().objectIdA << " and id: " << e.getCollisionData().objectIdB << std::endl;
}
void testCollisionEvent() {
Collision testCollision(1, 2, {3, 4}, {5, 6}, 7.8f);
@@ -69,19 +69,3 @@ int main(int argc, char * args[]) {
gameLoop.loop();
return 0;
}
-// void collisionUpdate(){
-// int count;
-// //iedere collision
-// for (int i = 0; i < count; i++)
-// {
-// //trigger object 1
-// //triger object 2
-// triggerEvent(CollisionEvent(1,2),1);
-// triggerEvent(CollisionEvent(1,2),2);
-// }
-
-// }
-// int main(){
-
-// return 0;
-// }
diff --git a/mwe/events/src/uiObject.cpp b/mwe/events/src/uiObject.cpp
index ef4443f..31ff486 100644
--- a/mwe/events/src/uiObject.cpp
+++ b/mwe/events/src/uiObject.cpp
@@ -19,7 +19,7 @@ Text::Text(int width, int height)
}
TextInput::TextInput(int width, int height)
- : UIObject(width, height), textBuffer(""), placeholder(""), caretPosition(0),
+ : 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;
diff --git a/mwe/events/src/uiRenderer.cpp b/mwe/events/src/uiRenderer.cpp
index 4a756f9..dbe8dfe 100644
--- a/mwe/events/src/uiRenderer.cpp
+++ b/mwe/events/src/uiRenderer.cpp
@@ -45,28 +45,59 @@ void UIRenderer::renderText(Text* text) {
}
}
-// Private helper function to render a TextInput
void UIRenderer::renderTextInput(TextInput* textInput) {
- 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 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 text or placeholder
- if (!textInput->textBuffer.empty()) {
- SDL_Color sdlColor = {textInput->textColor.red, textInput->textColor.green, textInput->textColor.blue, 255};
- SDL_Surface* textSurface = TTF_RenderText_Blended(textInput->font, textInput->textBuffer.c_str(), sdlColor);
- SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurface);
- SDL_Rect textRect = {textInput->x + 5, textInput->y + 5, textSurface->w, textSurface->h};
- SDL_RenderCopy(renderer, textTexture, nullptr, &textRect);
- SDL_FreeSurface(textSurface);
- SDL_DestroyTexture(textTexture);
- } else if (!textInput->placeholder.empty()) {
- SDL_Color sdlColor = {128, 128, 128, 255}; // Placeholder color
- SDL_Surface* placeholderSurface = TTF_RenderText_Blended(textInput->font, textInput->placeholder.c_str(), sdlColor);
- SDL_Texture* placeholderTexture = SDL_CreateTextureFromSurface(renderer, placeholderSurface);
- SDL_Rect placeholderRect = {textInput->x + 5, textInput->y + 5, placeholderSurface->w, placeholderSurface->h};
- SDL_RenderCopy(renderer, placeholderTexture, nullptr, &placeholderRect);
- SDL_FreeSurface(placeholderSurface);
- SDL_DestroyTexture(placeholderTexture);
- }
+ // // 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;
+ // }
+
+ // 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;
+ // }
+ // }
}
+
diff --git a/mwe/events/src/window.cpp b/mwe/events/src/window.cpp
index a3bae40..7192e6b 100644
--- a/mwe/events/src/window.cpp
+++ b/mwe/events/src/window.cpp
@@ -36,7 +36,6 @@ bool WindowManager::initWindow() {
}
void WindowManager::destroyWindow() {
- delete uiRenderer;
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();