aboutsummaryrefslogtreecommitdiff
path: root/mwe/events/src/inputSystem.cpp
blob: bb26e8b15bc30e0eba801969a88045d783d86807 (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
#include "inputSystem.h"

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) {
            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;
    }
	}
}
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();
    //     }
    // }
}