diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/crepe/api/KeyCodes.h | 1 | ||||
-rw-r--r-- | src/crepe/facade/SDLContext.cpp | 57 | ||||
-rw-r--r-- | src/crepe/facade/SDLContext.h | 218 | ||||
-rw-r--r-- | src/crepe/system/InputSystem.cpp | 57 | ||||
-rw-r--r-- | src/crepe/system/InputSystem.h | 14 | ||||
-rw-r--r-- | src/test/EventTest.cpp | 6 | ||||
-rw-r--r-- | src/test/InputTest.cpp | 9 |
7 files changed, 175 insertions, 187 deletions
diff --git a/src/crepe/api/KeyCodes.h b/src/crepe/api/KeyCodes.h index a13d1af..dc3219a 100644 --- a/src/crepe/api/KeyCodes.h +++ b/src/crepe/api/KeyCodes.h @@ -155,5 +155,4 @@ enum class Keycode { MENU = 348, //!< Menu key. }; - } // namespace crepe diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 7c7d58e..7e19ede 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -77,11 +77,11 @@ SDLContext::~SDLContext() { Keycode SDLContext::sdl_to_keycode(SDL_Scancode sdl_key) { auto it = LOOKUP_TABLE.find(sdl_key); - if (it != LOOKUP_TABLE.end()) { - return it->second; - } + if (it != LOOKUP_TABLE.end()) { + return it->second; + } - return Keycode::NONE; + return Keycode::NONE; } void SDLContext::update_keyboard_state() { // Array to hold the key states (true if pressed, false if not) @@ -95,7 +95,6 @@ void SDLContext::update_keyboard_state() { this->keyboard_state[key] = current_state[i] != 0; } } - } MouseButton SDLContext::sdl_to_mousebutton(Uint8 sdl_button) { @@ -286,8 +285,7 @@ std::vector<SDLContext::EventData> SDLContext::get_events() { case SDL_QUIT: event_list.push_back({.event_type = SDLContext::EventType::SHUTDOWN}); break; - case SDL_KEYDOWN: - { + case SDL_KEYDOWN: { this->update_keyboard_state(); EventData transfer_event; transfer_event.event_type = SDLContext::EventType::KEYDOWN; @@ -296,10 +294,10 @@ std::vector<SDLContext::EventData> SDLContext::get_events() { .key_repeat = event.key.repeat != 0, }; event_list.push_back(transfer_event); - } break; - case SDL_KEYUP: - { + } + + case SDL_KEYUP: { this->update_keyboard_state(); EventData transfer_event; transfer_event.event_type = SDLContext::EventType::KEYUP; @@ -308,10 +306,10 @@ std::vector<SDLContext::EventData> SDLContext::get_events() { .key_repeat = false, }; event_list.push_back(transfer_event); - } break; - case SDL_MOUSEBUTTONDOWN: - { + } + + case SDL_MOUSEBUTTONDOWN: { EventData transfer_event; transfer_event.event_type = SDLContext::EventType::MOUSEDOWN; transfer_event.data.mouse_data = MouseData{ @@ -319,10 +317,9 @@ std::vector<SDLContext::EventData> SDLContext::get_events() { .mouse_position = mouse_pos, }; event_list.push_back(transfer_event); - - } break; - case SDL_MOUSEBUTTONUP: - { + break; + } + case SDL_MOUSEBUTTONUP: { EventData transfer_event; transfer_event.event_type = SDLContext::EventType::MOUSEUP; transfer_event.data.mouse_data = MouseData{ @@ -330,8 +327,8 @@ std::vector<SDLContext::EventData> SDLContext::get_events() { .mouse_position = mouse_pos, }; event_list.push_back(transfer_event); - - } break; + break; + } case SDL_MOUSEMOTION: { EventData transfer_event; @@ -341,7 +338,8 @@ std::vector<SDLContext::EventData> SDLContext::get_events() { .rel_mouse_move = {event.motion.xrel, event.motion.yrel}, }; event_list.push_back(transfer_event); - } break; + break; + } case SDL_MOUSEWHEEL: { EventData transfer_event; @@ -352,10 +350,11 @@ std::vector<SDLContext::EventData> SDLContext::get_events() { .scroll_delta = event.wheel.preciseY, }; event_list.push_back(transfer_event); - } break; - case SDL_WINDOWEVENT: - handle_window_event(event.window, event_list); - break; + break; + } + case SDL_WINDOWEVENT: + handle_window_event(event.window, event_list); + break; } } @@ -371,18 +370,16 @@ void SDLContext::handle_window_event(const SDL_WindowEvent & window_event, case SDL_WINDOWEVENT_RESIZED: { EventData transfer_event; transfer_event.event_type = SDLContext::EventType::WINDOW_RESIZE; - transfer_event.data.window_data = WindowData{ - .resize_dimension = {window_event.data1, window_event.data2} - }; + transfer_event.data.window_data + = WindowData{.resize_dimension = {window_event.data1, window_event.data2}}; event_list.push_back(transfer_event); break; } case SDL_WINDOWEVENT_MOVED: { EventData transfer_event; transfer_event.event_type = SDLContext::EventType::WINDOW_MOVE; - transfer_event.data.window_data = WindowData{ - .move_delta = {window_event.data1, window_event.data2} - }; + transfer_event.data.window_data + = WindowData{.move_delta = {window_event.data1, window_event.data2}}; event_list.push_back(transfer_event); break; } diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index e56d531..7ccefeb 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -106,16 +106,16 @@ public: }; //! EventData struct for passing event data from facade struct EventData { - SDLContext::EventType event_type = SDLContext::EventType::NONE; + SDLContext::EventType event_type = SDLContext::EventType::NONE; - union EventDataUnion { - KeyData key_data; - MouseData mouse_data; - WindowData window_data; + union EventDataUnion { + KeyData key_data; + MouseData mouse_data; + WindowData window_data; - EventDataUnion() {} - ~EventDataUnion() {} - } data; + EventDataUnion() {} + ~EventDataUnion() {} + } data; }; /** * \brief Retrieves the current state of the keyboard. @@ -286,108 +286,108 @@ private: * - this is defined in this class because get_events() needs this information aswell */ CameraAuxiliaryData cam_aux_data; -private: + +private: std::unordered_map<Keycode, bool> keyboard_state; - const std::unordered_map<SDL_Scancode, Keycode> LOOKUP_TABLE = { - {SDL_SCANCODE_SPACE, Keycode::SPACE}, - {SDL_SCANCODE_APOSTROPHE, Keycode::APOSTROPHE}, - {SDL_SCANCODE_COMMA, Keycode::COMMA}, - {SDL_SCANCODE_MINUS, Keycode::MINUS}, - {SDL_SCANCODE_PERIOD, Keycode::PERIOD}, - {SDL_SCANCODE_SLASH, Keycode::SLASH}, - {SDL_SCANCODE_0, Keycode::D0}, - {SDL_SCANCODE_1, Keycode::D1}, - {SDL_SCANCODE_2, Keycode::D2}, - {SDL_SCANCODE_3, Keycode::D3}, - {SDL_SCANCODE_4, Keycode::D4}, - {SDL_SCANCODE_5, Keycode::D5}, - {SDL_SCANCODE_6, Keycode::D6}, - {SDL_SCANCODE_7, Keycode::D7}, - {SDL_SCANCODE_8, Keycode::D8}, - {SDL_SCANCODE_9, Keycode::D9}, - {SDL_SCANCODE_SEMICOLON, Keycode::SEMICOLON}, - {SDL_SCANCODE_EQUALS, Keycode::EQUAL}, - {SDL_SCANCODE_A, Keycode::A}, - {SDL_SCANCODE_B, Keycode::B}, - {SDL_SCANCODE_C, Keycode::C}, - {SDL_SCANCODE_D, Keycode::D}, - {SDL_SCANCODE_E, Keycode::E}, - {SDL_SCANCODE_F, Keycode::F}, - {SDL_SCANCODE_G, Keycode::G}, - {SDL_SCANCODE_H, Keycode::H}, - {SDL_SCANCODE_I, Keycode::I}, - {SDL_SCANCODE_J, Keycode::J}, - {SDL_SCANCODE_K, Keycode::K}, - {SDL_SCANCODE_L, Keycode::L}, - {SDL_SCANCODE_M, Keycode::M}, - {SDL_SCANCODE_N, Keycode::N}, - {SDL_SCANCODE_O, Keycode::O}, - {SDL_SCANCODE_P, Keycode::P}, - {SDL_SCANCODE_Q, Keycode::Q}, - {SDL_SCANCODE_R, Keycode::R}, - {SDL_SCANCODE_S, Keycode::S}, - {SDL_SCANCODE_T, Keycode::T}, - {SDL_SCANCODE_U, Keycode::U}, - {SDL_SCANCODE_V, Keycode::V}, - {SDL_SCANCODE_W, Keycode::W}, - {SDL_SCANCODE_X, Keycode::X}, - {SDL_SCANCODE_Y, Keycode::Y}, - {SDL_SCANCODE_Z, Keycode::Z}, - {SDL_SCANCODE_LEFTBRACKET, Keycode::LEFT_BRACKET}, - {SDL_SCANCODE_BACKSLASH, Keycode::BACKSLASH}, - {SDL_SCANCODE_RIGHTBRACKET, Keycode::RIGHT_BRACKET}, - {SDL_SCANCODE_GRAVE, Keycode::GRAVE_ACCENT}, - {SDL_SCANCODE_ESCAPE, Keycode::ESCAPE}, - {SDL_SCANCODE_RETURN, Keycode::ENTER}, - {SDL_SCANCODE_TAB, Keycode::TAB}, - {SDL_SCANCODE_BACKSPACE, Keycode::BACKSPACE}, - {SDL_SCANCODE_INSERT, Keycode::INSERT}, - {SDL_SCANCODE_DELETE, Keycode::DELETE}, - {SDL_SCANCODE_RIGHT, Keycode::RIGHT}, - {SDL_SCANCODE_LEFT, Keycode::LEFT}, - {SDL_SCANCODE_DOWN, Keycode::DOWN}, - {SDL_SCANCODE_UP, Keycode::UP}, - {SDL_SCANCODE_PAGEUP, Keycode::PAGE_UP}, - {SDL_SCANCODE_PAGEDOWN, Keycode::PAGE_DOWN}, - {SDL_SCANCODE_HOME, Keycode::HOME}, - {SDL_SCANCODE_END, Keycode::END}, - {SDL_SCANCODE_CAPSLOCK, Keycode::CAPS_LOCK}, - {SDL_SCANCODE_SCROLLLOCK, Keycode::SCROLL_LOCK}, - {SDL_SCANCODE_NUMLOCKCLEAR, Keycode::NUM_LOCK}, - {SDL_SCANCODE_PRINTSCREEN, Keycode::PRINT_SCREEN}, - {SDL_SCANCODE_PAUSE, Keycode::PAUSE}, - {SDL_SCANCODE_F1, Keycode::F1}, - {SDL_SCANCODE_F2, Keycode::F2}, - {SDL_SCANCODE_F3, Keycode::F3}, - {SDL_SCANCODE_F4, Keycode::F4}, - {SDL_SCANCODE_F5, Keycode::F5}, - {SDL_SCANCODE_F6, Keycode::F6}, - {SDL_SCANCODE_F7, Keycode::F7}, - {SDL_SCANCODE_F8, Keycode::F8}, - {SDL_SCANCODE_F9, Keycode::F9}, - {SDL_SCANCODE_F10, Keycode::F10}, - {SDL_SCANCODE_F11, Keycode::F11}, - {SDL_SCANCODE_F12, Keycode::F12}, - {SDL_SCANCODE_KP_0, Keycode::KP0}, - {SDL_SCANCODE_KP_1, Keycode::KP1}, - {SDL_SCANCODE_KP_2, Keycode::KP2}, - {SDL_SCANCODE_KP_3, Keycode::KP3}, - {SDL_SCANCODE_KP_4, Keycode::KP4}, - {SDL_SCANCODE_KP_5, Keycode::KP5}, - {SDL_SCANCODE_KP_6, Keycode::KP6}, - {SDL_SCANCODE_KP_7, Keycode::KP7}, - {SDL_SCANCODE_KP_8, Keycode::KP8}, - {SDL_SCANCODE_KP_9, Keycode::KP9}, - {SDL_SCANCODE_LSHIFT, Keycode::LEFT_SHIFT}, - {SDL_SCANCODE_LCTRL, Keycode::LEFT_CONTROL}, - {SDL_SCANCODE_LALT, Keycode::LEFT_ALT}, - {SDL_SCANCODE_LGUI, Keycode::LEFT_SUPER}, - {SDL_SCANCODE_RSHIFT, Keycode::RIGHT_SHIFT}, - {SDL_SCANCODE_RCTRL, Keycode::RIGHT_CONTROL}, - {SDL_SCANCODE_RALT, Keycode::RIGHT_ALT}, - {SDL_SCANCODE_RGUI, Keycode::RIGHT_SUPER}, - {SDL_SCANCODE_MENU, Keycode::MENU} - }; + const std::unordered_map<SDL_Scancode, Keycode> LOOKUP_TABLE + = {{SDL_SCANCODE_SPACE, Keycode::SPACE}, + {SDL_SCANCODE_APOSTROPHE, Keycode::APOSTROPHE}, + {SDL_SCANCODE_COMMA, Keycode::COMMA}, + {SDL_SCANCODE_MINUS, Keycode::MINUS}, + {SDL_SCANCODE_PERIOD, Keycode::PERIOD}, + {SDL_SCANCODE_SLASH, Keycode::SLASH}, + {SDL_SCANCODE_0, Keycode::D0}, + {SDL_SCANCODE_1, Keycode::D1}, + {SDL_SCANCODE_2, Keycode::D2}, + {SDL_SCANCODE_3, Keycode::D3}, + {SDL_SCANCODE_4, Keycode::D4}, + {SDL_SCANCODE_5, Keycode::D5}, + {SDL_SCANCODE_6, Keycode::D6}, + {SDL_SCANCODE_7, Keycode::D7}, + {SDL_SCANCODE_8, Keycode::D8}, + {SDL_SCANCODE_9, Keycode::D9}, + {SDL_SCANCODE_SEMICOLON, Keycode::SEMICOLON}, + {SDL_SCANCODE_EQUALS, Keycode::EQUAL}, + {SDL_SCANCODE_A, Keycode::A}, + {SDL_SCANCODE_B, Keycode::B}, + {SDL_SCANCODE_C, Keycode::C}, + {SDL_SCANCODE_D, Keycode::D}, + {SDL_SCANCODE_E, Keycode::E}, + {SDL_SCANCODE_F, Keycode::F}, + {SDL_SCANCODE_G, Keycode::G}, + {SDL_SCANCODE_H, Keycode::H}, + {SDL_SCANCODE_I, Keycode::I}, + {SDL_SCANCODE_J, Keycode::J}, + {SDL_SCANCODE_K, Keycode::K}, + {SDL_SCANCODE_L, Keycode::L}, + {SDL_SCANCODE_M, Keycode::M}, + {SDL_SCANCODE_N, Keycode::N}, + {SDL_SCANCODE_O, Keycode::O}, + {SDL_SCANCODE_P, Keycode::P}, + {SDL_SCANCODE_Q, Keycode::Q}, + {SDL_SCANCODE_R, Keycode::R}, + {SDL_SCANCODE_S, Keycode::S}, + {SDL_SCANCODE_T, Keycode::T}, + {SDL_SCANCODE_U, Keycode::U}, + {SDL_SCANCODE_V, Keycode::V}, + {SDL_SCANCODE_W, Keycode::W}, + {SDL_SCANCODE_X, Keycode::X}, + {SDL_SCANCODE_Y, Keycode::Y}, + {SDL_SCANCODE_Z, Keycode::Z}, + {SDL_SCANCODE_LEFTBRACKET, Keycode::LEFT_BRACKET}, + {SDL_SCANCODE_BACKSLASH, Keycode::BACKSLASH}, + {SDL_SCANCODE_RIGHTBRACKET, Keycode::RIGHT_BRACKET}, + {SDL_SCANCODE_GRAVE, Keycode::GRAVE_ACCENT}, + {SDL_SCANCODE_ESCAPE, Keycode::ESCAPE}, + {SDL_SCANCODE_RETURN, Keycode::ENTER}, + {SDL_SCANCODE_TAB, Keycode::TAB}, + {SDL_SCANCODE_BACKSPACE, Keycode::BACKSPACE}, + {SDL_SCANCODE_INSERT, Keycode::INSERT}, + {SDL_SCANCODE_DELETE, Keycode::DELETE}, + {SDL_SCANCODE_RIGHT, Keycode::RIGHT}, + {SDL_SCANCODE_LEFT, Keycode::LEFT}, + {SDL_SCANCODE_DOWN, Keycode::DOWN}, + {SDL_SCANCODE_UP, Keycode::UP}, + {SDL_SCANCODE_PAGEUP, Keycode::PAGE_UP}, + {SDL_SCANCODE_PAGEDOWN, Keycode::PAGE_DOWN}, + {SDL_SCANCODE_HOME, Keycode::HOME}, + {SDL_SCANCODE_END, Keycode::END}, + {SDL_SCANCODE_CAPSLOCK, Keycode::CAPS_LOCK}, + {SDL_SCANCODE_SCROLLLOCK, Keycode::SCROLL_LOCK}, + {SDL_SCANCODE_NUMLOCKCLEAR, Keycode::NUM_LOCK}, + {SDL_SCANCODE_PRINTSCREEN, Keycode::PRINT_SCREEN}, + {SDL_SCANCODE_PAUSE, Keycode::PAUSE}, + {SDL_SCANCODE_F1, Keycode::F1}, + {SDL_SCANCODE_F2, Keycode::F2}, + {SDL_SCANCODE_F3, Keycode::F3}, + {SDL_SCANCODE_F4, Keycode::F4}, + {SDL_SCANCODE_F5, Keycode::F5}, + {SDL_SCANCODE_F6, Keycode::F6}, + {SDL_SCANCODE_F7, Keycode::F7}, + {SDL_SCANCODE_F8, Keycode::F8}, + {SDL_SCANCODE_F9, Keycode::F9}, + {SDL_SCANCODE_F10, Keycode::F10}, + {SDL_SCANCODE_F11, Keycode::F11}, + {SDL_SCANCODE_F12, Keycode::F12}, + {SDL_SCANCODE_KP_0, Keycode::KP0}, + {SDL_SCANCODE_KP_1, Keycode::KP1}, + {SDL_SCANCODE_KP_2, Keycode::KP2}, + {SDL_SCANCODE_KP_3, Keycode::KP3}, + {SDL_SCANCODE_KP_4, Keycode::KP4}, + {SDL_SCANCODE_KP_5, Keycode::KP5}, + {SDL_SCANCODE_KP_6, Keycode::KP6}, + {SDL_SCANCODE_KP_7, Keycode::KP7}, + {SDL_SCANCODE_KP_8, Keycode::KP8}, + {SDL_SCANCODE_KP_9, Keycode::KP9}, + {SDL_SCANCODE_LSHIFT, Keycode::LEFT_SHIFT}, + {SDL_SCANCODE_LCTRL, Keycode::LEFT_CONTROL}, + {SDL_SCANCODE_LALT, Keycode::LEFT_ALT}, + {SDL_SCANCODE_LGUI, Keycode::LEFT_SUPER}, + {SDL_SCANCODE_RSHIFT, Keycode::RIGHT_SHIFT}, + {SDL_SCANCODE_RCTRL, Keycode::RIGHT_CONTROL}, + {SDL_SCANCODE_RALT, Keycode::RIGHT_ALT}, + {SDL_SCANCODE_RGUI, Keycode::RIGHT_SUPER}, + {SDL_SCANCODE_MENU, Keycode::MENU}}; }; } // namespace crepe diff --git a/src/crepe/system/InputSystem.cpp b/src/crepe/system/InputSystem.cpp index bb454af..8de700b 100644 --- a/src/crepe/system/InputSystem.cpp +++ b/src/crepe/system/InputSystem.cpp @@ -10,7 +10,7 @@ using namespace crepe; void InputSystem::update() { ComponentManager & mgr = this->mediator.component_manager; - + SDLContext & context = this->mediator.sdl_context; std::vector<SDLContext::EventData> event_list = context.get_events(); RefVector<Button> buttons = mgr.get_components_by_type<Button>(); @@ -31,31 +31,31 @@ void InputSystem::update() { Transform & cam_transform = transform_vec.front().get(); vec2 camera_origin = cam_transform.position + current_cam.data.postion_offset - - (current_cam.viewport_size / 2); + - (current_cam.viewport_size / 2); for (const SDLContext::EventData & event : event_list) { // Only calculate mouse coordinates for relevant events - if(this->is_mouse_event(event.event_type)) { - this->handle_mouse_event(event,camera_origin,current_cam); - + if (this->is_mouse_event(event.event_type)) { + this->handle_mouse_event(event, camera_origin, current_cam); + } else { this->handle_non_mouse_event(event); - } } } -void InputSystem::handle_mouse_event(const SDLContext::EventData &event, const vec2 &camera_origin, - const Camera ¤t_cam){ +void InputSystem::handle_mouse_event(const SDLContext::EventData & event, + const vec2 & camera_origin, const Camera & current_cam) { EventManager & event_mgr = this->mediator.event_manager; vec2 adjusted_mouse; adjusted_mouse.x = event.data.mouse_data.mouse_position.x + camera_origin.x; adjusted_mouse.x = event.data.mouse_data.mouse_position.y + camera_origin.y; // Check if the mouse is within the viewport if ((adjusted_mouse.x < camera_origin.x - || adjusted_mouse.x > camera_origin.x + current_cam.viewport_size.x - || adjusted_mouse.y < camera_origin.y - || adjusted_mouse.y > camera_origin.y + current_cam.viewport_size.y)) return; + || adjusted_mouse.x > camera_origin.x + current_cam.viewport_size.x + || adjusted_mouse.y < camera_origin.y + || adjusted_mouse.y > camera_origin.y + current_cam.viewport_size.y)) + return; // Handle mouse-specific events switch (event.event_type) { @@ -105,14 +105,14 @@ void InputSystem::handle_mouse_event(const SDLContext::EventData &event, const v default: break; - } + } } -void InputSystem::handle_non_mouse_event(const SDLContext::EventData &event){ +void InputSystem::handle_non_mouse_event(const SDLContext::EventData & event) { EventManager & event_mgr = this->mediator.event_manager; switch (event.event_type) { case SDLContext::EventType::KEYDOWN: - + event_mgr.queue_event<KeyPressEvent>( {.repeat = event.data.key_data.key_repeat, .key = event.data.key_data.key}); break; @@ -150,7 +150,7 @@ void InputSystem::handle_non_mouse_event(const SDLContext::EventData &event){ } } -bool InputSystem::is_mouse_event(SDLContext::EventType event_type){ +bool InputSystem::is_mouse_event(SDLContext::EventType event_type) { return (event_type == SDLContext::EventType::MOUSEDOWN || event_type == SDLContext::EventType::MOUSEUP || event_type == SDLContext::EventType::MOUSEMOVE @@ -158,29 +158,28 @@ bool InputSystem::is_mouse_event(SDLContext::EventType event_type){ } void InputSystem::handle_move(const SDLContext::EventData & event_data, - const vec2& mouse_pos) { + const vec2 & mouse_pos) { ComponentManager & mgr = this->mediator.component_manager; RefVector<Button> buttons = mgr.get_components_by_type<Button>(); for (Button & button : buttons) { - if(!button.active) continue; + if (!button.active) continue; RefVector<Transform> transform_vec = mgr.get_components_by_id<Transform>(button.game_object_id); Transform & transform(transform_vec.front().get()); bool was_hovering = button.hover; - if (this->is_mouse_inside_button(mouse_pos, button, - transform)) { + if (this->is_mouse_inside_button(mouse_pos, button, transform)) { button.hover = true; - if(!button.on_mouse_enter) continue; + if (!button.on_mouse_enter) continue; if (!was_hovering) { button.on_mouse_enter(); } } else { button.hover = false; // Trigger the on_exit callback if the hover state just changed to false - if(!button.on_mouse_exit) continue; + if (!button.on_mouse_exit) continue; if (was_hovering) { button.on_mouse_exit(); } @@ -188,28 +187,27 @@ void InputSystem::handle_move(const SDLContext::EventData & event_data, } } -void InputSystem::handle_click(const MouseButton & mouse_button, const vec2& mouse_pos) { +void InputSystem::handle_click(const MouseButton & mouse_button, const vec2 & mouse_pos) { ComponentManager & mgr = this->mediator.component_manager; RefVector<Button> buttons = mgr.get_components_by_type<Button>(); for (Button & button : buttons) { - if(!button.active) continue; + if (!button.active) continue; if (!button.on_click) continue; RefVector<Transform> transform_vec = mgr.get_components_by_id<Transform>(button.game_object_id); Transform & transform = transform_vec.front().get(); - - if (this->is_mouse_inside_button(mouse_pos, button, - transform)) { - + + if (this->is_mouse_inside_button(mouse_pos, button, transform)) { + button.on_click(); } } } -bool InputSystem::is_mouse_inside_button(const vec2& mouse_pos, - const Button & button, const Transform & transform) { +bool InputSystem::is_mouse_inside_button(const vec2 & mouse_pos, const Button & button, + const Transform & transform) { int actual_x = transform.position.x + button.offset.x; int actual_y = transform.position.y + button.offset.y; @@ -220,4 +218,3 @@ bool InputSystem::is_mouse_inside_button(const vec2& mouse_pos, return mouse_pos.x >= actual_x - half_width && mouse_pos.x <= actual_x + half_width && mouse_pos.y >= actual_y - half_height && mouse_pos.y <= actual_y + half_height; } - diff --git a/src/crepe/system/InputSystem.h b/src/crepe/system/InputSystem.h index 7b8f510..63dfae5 100644 --- a/src/crepe/system/InputSystem.h +++ b/src/crepe/system/InputSystem.h @@ -52,8 +52,8 @@ private: * This method processes mouse events, adjusts the mouse position to world coordinates, * and triggers the appropriate mouse-specific event handling logic. */ - void handle_mouse_event(const SDLContext::EventData &event, const vec2 &camera_origin, - const Camera ¤t_cam); + void handle_mouse_event(const SDLContext::EventData & event, const vec2 & camera_origin, + const Camera & current_cam); /** * \brief Handles non-mouse-related events. * \param event The event data for the non-mouse event. @@ -61,7 +61,7 @@ private: * This method processes events that do not involve the mouse, such as keyboard events, * window events, and shutdown events, and triggers the corresponding event actions. */ - void handle_non_mouse_event(const SDLContext::EventData &event); + void handle_non_mouse_event(const SDLContext::EventData & event); /** * \brief Handles the mouse click event. * \param mouse_button The mouse button involved in the click. @@ -70,7 +70,7 @@ private: * * This method processes the mouse click event and triggers the corresponding button action. */ - void handle_click(const MouseButton & mouse_button,const vec2& mouse_pos); + void handle_click(const MouseButton & mouse_button, const vec2 & mouse_pos); /** * \brief Handles the mouse movement event. @@ -80,7 +80,7 @@ private: * * This method processes the mouse movement event and updates the button hover state. */ - void handle_move(const SDLContext::EventData & event_data, const vec2& mouse_pos); + void handle_move(const SDLContext::EventData & event_data, const vec2 & mouse_pos); /** * \brief Checks if the mouse position is inside the bounds of the button. @@ -90,8 +90,8 @@ private: * \param transform The transform component of the button. * \return True if the mouse is inside the button, false otherwise. */ - bool is_mouse_inside_button(const vec2& mouse_pos, - const Button & button, const Transform & transform); + bool is_mouse_inside_button(const vec2 & mouse_pos, const Button & button, + const Transform & transform); /** * \brief Handles the button press event, calling the on_click callback if necessary. diff --git a/src/test/EventTest.cpp b/src/test/EventTest.cpp index f30f15a..f8be3fe 100644 --- a/src/test/EventTest.cpp +++ b/src/test/EventTest.cpp @@ -56,8 +56,7 @@ TEST_F(EventManagerTest, EventManagerTest_trigger_all_channels) { event_mgr.subscribe<MouseClickEvent>(mouse_handler, EventManager::CHANNEL_ALL); MouseClickEvent click_event{.mouse_pos = {100, 200}, .button = MouseButton::LEFT_MOUSE}; - event_mgr.trigger_event<MouseClickEvent>(click_event, - EventManager::CHANNEL_ALL); + event_mgr.trigger_event<MouseClickEvent>(click_event, EventManager::CHANNEL_ALL); EXPECT_TRUE(triggered); } @@ -74,8 +73,7 @@ TEST_F(EventManagerTest, EventManagerTest_trigger_one_channel) { event_mgr.subscribe<MouseClickEvent>(mouse_handler, test_channel); MouseClickEvent click_event{.mouse_pos = {100, 200}, .button = MouseButton::LEFT_MOUSE}; - event_mgr.trigger_event<MouseClickEvent>(click_event, - EventManager::CHANNEL_ALL); + event_mgr.trigger_event<MouseClickEvent>(click_event, EventManager::CHANNEL_ALL); EXPECT_FALSE(triggered); event_mgr.trigger_event<MouseClickEvent>(click_event, test_channel); diff --git a/src/test/InputTest.cpp b/src/test/InputTest.cpp index 7063561..09163a6 100644 --- a/src/test/InputTest.cpp +++ b/src/test/InputTest.cpp @@ -43,8 +43,7 @@ protected: //mediator.component_manager = mgr; //event_manager.clear(); } - void TearDown() override { - } + void TearDown() override {} void simulate_mouse_click(int mouse_x, int mouse_y, Uint8 mouse_button) { SDL_Event event; @@ -210,8 +209,7 @@ TEST_F(InputTest, testButtonClick) { GameObject button_obj = mgr.new_object("body", "person", vec2{0, 0}, 0, 1); bool button_clicked = false; std::function<void()> on_click = [&]() { button_clicked = true; }; - auto & button - = button_obj.add_component<Button>(vec2{100, 100}, vec2{0, 0}, on_click); + auto & button = button_obj.add_component<Button>(vec2{100, 100}, vec2{0, 0}, on_click); bool hover = false; button.active = true; @@ -230,8 +228,7 @@ TEST_F(InputTest, testButtonHover) { GameObject button_obj = mgr.new_object("body", "person", vec2{0, 0}, 0, 1); bool button_clicked = false; std::function<void()> on_click = [&]() { button_clicked = true; }; - auto & button - = button_obj.add_component<Button>(vec2{100, 100}, vec2{0, 0}, on_click); + auto & button = button_obj.add_component<Button>(vec2{100, 100}, vec2{0, 0}, on_click); button.active = true; // Mouse not on button |