diff options
| author | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-09 11:41:16 +0100 | 
|---|---|---|
| committer | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-09 11:41:16 +0100 | 
| commit | e3318b7e0e075567a6a9e29239e074f4e02fc595 (patch) | |
| tree | 53b3f263f40636ca989e421a9aa942a61cc08802 /src | |
| parent | 588df868d851ac5195ce3380ab38c59b0e2aed7a (diff) | |
made getKeyboardState
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/api/KeyCodes.h | 2 | ||||
| -rw-r--r-- | src/crepe/facade/SDLContext.cpp | 237 | ||||
| -rw-r--r-- | src/crepe/facade/SDLContext.h | 3 | ||||
| -rw-r--r-- | src/crepe/system/InputSystem.cpp | 203 | 
4 files changed, 235 insertions, 210 deletions
| diff --git a/src/crepe/api/KeyCodes.h b/src/crepe/api/KeyCodes.h index fcfc080..6204cf2 100644 --- a/src/crepe/api/KeyCodes.h +++ b/src/crepe/api/KeyCodes.h @@ -150,5 +150,7 @@ enum class Keycode {  	RIGHT_SUPER = 347,  	/// \}  	MENU = 348, //!< Menu key. +	//! Not actually a key instead its the amount of keycodes there are for array indexing +	NUM_KEYCODES = 113,  };  } // namespace crepe diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index e3410cb..9e10803 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -77,118 +77,135 @@ SDLContext::~SDLContext() {  	SDL_Quit();  } -Keycode SDLContext::sdl_to_keycode(SDL_Keycode sdl_key) { -	static const std::array<Keycode, SDL_NUM_SCANCODES> LOOKUP_TABLE = [] { -		std::array<Keycode, SDL_NUM_SCANCODES> table{}; -		table.fill(Keycode::NONE); - -		table[SDL_SCANCODE_SPACE] = Keycode::SPACE; -		table[SDL_SCANCODE_APOSTROPHE] = Keycode::APOSTROPHE; -		table[SDL_SCANCODE_COMMA] = Keycode::COMMA; -		table[SDL_SCANCODE_MINUS] = Keycode::MINUS; -		table[SDL_SCANCODE_PERIOD] = Keycode::PERIOD; -		table[SDL_SCANCODE_SLASH] = Keycode::SLASH; -		table[SDL_SCANCODE_0] = Keycode::D0; -		table[SDL_SCANCODE_1] = Keycode::D1; -		table[SDL_SCANCODE_2] = Keycode::D2; -		table[SDL_SCANCODE_3] = Keycode::D3; -		table[SDL_SCANCODE_4] = Keycode::D4; -		table[SDL_SCANCODE_5] = Keycode::D5; -		table[SDL_SCANCODE_6] = Keycode::D6; -		table[SDL_SCANCODE_7] = Keycode::D7; -		table[SDL_SCANCODE_8] = Keycode::D8; -		table[SDL_SCANCODE_9] = Keycode::D9; -		table[SDL_SCANCODE_SEMICOLON] = Keycode::SEMICOLON; -		table[SDL_SCANCODE_EQUALS] = Keycode::EQUAL; -		table[SDL_SCANCODE_A] = Keycode::A; -		table[SDL_SCANCODE_B] = Keycode::B; -		table[SDL_SCANCODE_C] = Keycode::C; -		table[SDL_SCANCODE_D] = Keycode::D; -		table[SDL_SCANCODE_E] = Keycode::E; -		table[SDL_SCANCODE_F] = Keycode::F; -		table[SDL_SCANCODE_G] = Keycode::G; -		table[SDL_SCANCODE_H] = Keycode::H; -		table[SDL_SCANCODE_I] = Keycode::I; -		table[SDL_SCANCODE_J] = Keycode::J; -		table[SDL_SCANCODE_K] = Keycode::K; -		table[SDL_SCANCODE_L] = Keycode::L; -		table[SDL_SCANCODE_M] = Keycode::M; -		table[SDL_SCANCODE_N] = Keycode::N; -		table[SDL_SCANCODE_O] = Keycode::O; -		table[SDL_SCANCODE_P] = Keycode::P; -		table[SDL_SCANCODE_Q] = Keycode::Q; -		table[SDL_SCANCODE_R] = Keycode::R; -		table[SDL_SCANCODE_S] = Keycode::S; -		table[SDL_SCANCODE_T] = Keycode::T; -		table[SDL_SCANCODE_U] = Keycode::U; -		table[SDL_SCANCODE_V] = Keycode::V; -		table[SDL_SCANCODE_W] = Keycode::W; -		table[SDL_SCANCODE_X] = Keycode::X; -		table[SDL_SCANCODE_Y] = Keycode::Y; -		table[SDL_SCANCODE_Z] = Keycode::Z; -		table[SDL_SCANCODE_LEFTBRACKET] = Keycode::LEFT_BRACKET; -		table[SDL_SCANCODE_BACKSLASH] = Keycode::BACKSLASH; -		table[SDL_SCANCODE_RIGHTBRACKET] = Keycode::RIGHT_BRACKET; -		table[SDL_SCANCODE_GRAVE] = Keycode::GRAVE_ACCENT; -		table[SDL_SCANCODE_ESCAPE] = Keycode::ESCAPE; -		table[SDL_SCANCODE_RETURN] = Keycode::ENTER; -		table[SDL_SCANCODE_TAB] = Keycode::TAB; -		table[SDL_SCANCODE_BACKSPACE] = Keycode::BACKSPACE; -		table[SDL_SCANCODE_INSERT] = Keycode::INSERT; -		table[SDL_SCANCODE_DELETE] = Keycode::DELETE; -		table[SDL_SCANCODE_RIGHT] = Keycode::RIGHT; -		table[SDL_SCANCODE_LEFT] = Keycode::LEFT; -		table[SDL_SCANCODE_DOWN] = Keycode::DOWN; -		table[SDL_SCANCODE_UP] = Keycode::UP; -		table[SDL_SCANCODE_PAGEUP] = Keycode::PAGE_UP; -		table[SDL_SCANCODE_PAGEDOWN] = Keycode::PAGE_DOWN; -		table[SDL_SCANCODE_HOME] = Keycode::HOME; -		table[SDL_SCANCODE_END] = Keycode::END; -		table[SDL_SCANCODE_CAPSLOCK] = Keycode::CAPS_LOCK; -		table[SDL_SCANCODE_SCROLLLOCK] = Keycode::SCROLL_LOCK; -		table[SDL_SCANCODE_NUMLOCKCLEAR] = Keycode::NUM_LOCK; -		table[SDL_SCANCODE_PRINTSCREEN] = Keycode::PRINT_SCREEN; -		table[SDL_SCANCODE_PAUSE] = Keycode::PAUSE; -		table[SDL_SCANCODE_F1] = Keycode::F1; -		table[SDL_SCANCODE_F2] = Keycode::F2; -		table[SDL_SCANCODE_F3] = Keycode::F3; -		table[SDL_SCANCODE_F4] = Keycode::F4; -		table[SDL_SCANCODE_F5] = Keycode::F5; -		table[SDL_SCANCODE_F6] = Keycode::F6; -		table[SDL_SCANCODE_F7] = Keycode::F7; -		table[SDL_SCANCODE_F8] = Keycode::F8; -		table[SDL_SCANCODE_F9] = Keycode::F9; -		table[SDL_SCANCODE_F10] = Keycode::F10; -		table[SDL_SCANCODE_F11] = Keycode::F11; -		table[SDL_SCANCODE_F12] = Keycode::F12; -		table[SDL_SCANCODE_KP_0] = Keycode::KP0; -		table[SDL_SCANCODE_KP_1] = Keycode::KP1; -		table[SDL_SCANCODE_KP_2] = Keycode::KP2; -		table[SDL_SCANCODE_KP_3] = Keycode::KP3; -		table[SDL_SCANCODE_KP_4] = Keycode::KP4; -		table[SDL_SCANCODE_KP_5] = Keycode::KP5; -		table[SDL_SCANCODE_KP_6] = Keycode::KP6; -		table[SDL_SCANCODE_KP_7] = Keycode::KP7; -		table[SDL_SCANCODE_KP_8] = Keycode::KP8; -		table[SDL_SCANCODE_KP_9] = Keycode::KP9; -		table[SDL_SCANCODE_LSHIFT] = Keycode::LEFT_SHIFT; -		table[SDL_SCANCODE_LCTRL] = Keycode::LEFT_CONTROL; -		table[SDL_SCANCODE_LALT] = Keycode::LEFT_ALT; -		table[SDL_SCANCODE_LGUI] = Keycode::LEFT_SUPER; -		table[SDL_SCANCODE_RSHIFT] = Keycode::RIGHT_SHIFT; -		table[SDL_SCANCODE_RCTRL] = Keycode::RIGHT_CONTROL; -		table[SDL_SCANCODE_RALT] = Keycode::RIGHT_ALT; -		table[SDL_SCANCODE_RGUI] = Keycode::RIGHT_SUPER; -		table[SDL_SCANCODE_MENU] = Keycode::MENU; - -		return table; -	}(); +static const std::array<Keycode, SDL_NUM_SCANCODES>& get_lookup_table() { +    static const std::array<Keycode, SDL_NUM_SCANCODES> LOOKUP_TABLE = [] { +        std::array<Keycode, SDL_NUM_SCANCODES> table{}; +        table.fill(Keycode::NONE); + +        // Map all SDL scancodes to Keycodes +        table[SDL_SCANCODE_SPACE] = Keycode::SPACE; +        table[SDL_SCANCODE_APOSTROPHE] = Keycode::APOSTROPHE; +        table[SDL_SCANCODE_COMMA] = Keycode::COMMA; +        table[SDL_SCANCODE_MINUS] = Keycode::MINUS; +        table[SDL_SCANCODE_PERIOD] = Keycode::PERIOD; +        table[SDL_SCANCODE_SLASH] = Keycode::SLASH; +        table[SDL_SCANCODE_0] = Keycode::D0; +        table[SDL_SCANCODE_1] = Keycode::D1; +        table[SDL_SCANCODE_2] = Keycode::D2; +        table[SDL_SCANCODE_3] = Keycode::D3; +        table[SDL_SCANCODE_4] = Keycode::D4; +        table[SDL_SCANCODE_5] = Keycode::D5; +        table[SDL_SCANCODE_6] = Keycode::D6; +        table[SDL_SCANCODE_7] = Keycode::D7; +        table[SDL_SCANCODE_8] = Keycode::D8; +        table[SDL_SCANCODE_9] = Keycode::D9; +        table[SDL_SCANCODE_SEMICOLON] = Keycode::SEMICOLON; +        table[SDL_SCANCODE_EQUALS] = Keycode::EQUAL; +        table[SDL_SCANCODE_A] = Keycode::A; +        table[SDL_SCANCODE_B] = Keycode::B; +        table[SDL_SCANCODE_C] = Keycode::C; +        table[SDL_SCANCODE_D] = Keycode::D; +        table[SDL_SCANCODE_E] = Keycode::E; +        table[SDL_SCANCODE_F] = Keycode::F; +        table[SDL_SCANCODE_G] = Keycode::G; +        table[SDL_SCANCODE_H] = Keycode::H; +        table[SDL_SCANCODE_I] = Keycode::I; +        table[SDL_SCANCODE_J] = Keycode::J; +        table[SDL_SCANCODE_K] = Keycode::K; +        table[SDL_SCANCODE_L] = Keycode::L; +        table[SDL_SCANCODE_M] = Keycode::M; +        table[SDL_SCANCODE_N] = Keycode::N; +        table[SDL_SCANCODE_O] = Keycode::O; +        table[SDL_SCANCODE_P] = Keycode::P; +        table[SDL_SCANCODE_Q] = Keycode::Q; +        table[SDL_SCANCODE_R] = Keycode::R; +        table[SDL_SCANCODE_S] = Keycode::S; +        table[SDL_SCANCODE_T] = Keycode::T; +        table[SDL_SCANCODE_U] = Keycode::U; +        table[SDL_SCANCODE_V] = Keycode::V; +        table[SDL_SCANCODE_W] = Keycode::W; +        table[SDL_SCANCODE_X] = Keycode::X; +        table[SDL_SCANCODE_Y] = Keycode::Y; +        table[SDL_SCANCODE_Z] = Keycode::Z; +        table[SDL_SCANCODE_LEFTBRACKET] = Keycode::LEFT_BRACKET; +        table[SDL_SCANCODE_BACKSLASH] = Keycode::BACKSLASH; +        table[SDL_SCANCODE_RIGHTBRACKET] = Keycode::RIGHT_BRACKET; +        table[SDL_SCANCODE_GRAVE] = Keycode::GRAVE_ACCENT; +        table[SDL_SCANCODE_ESCAPE] = Keycode::ESCAPE; +        table[SDL_SCANCODE_RETURN] = Keycode::ENTER; +        table[SDL_SCANCODE_TAB] = Keycode::TAB; +        table[SDL_SCANCODE_BACKSPACE] = Keycode::BACKSPACE; +        table[SDL_SCANCODE_INSERT] = Keycode::INSERT; +        table[SDL_SCANCODE_DELETE] = Keycode::DELETE; +        table[SDL_SCANCODE_RIGHT] = Keycode::RIGHT; +        table[SDL_SCANCODE_LEFT] = Keycode::LEFT; +        table[SDL_SCANCODE_DOWN] = Keycode::DOWN; +        table[SDL_SCANCODE_UP] = Keycode::UP; +        table[SDL_SCANCODE_PAGEUP] = Keycode::PAGE_UP; +        table[SDL_SCANCODE_PAGEDOWN] = Keycode::PAGE_DOWN; +        table[SDL_SCANCODE_HOME] = Keycode::HOME; +        table[SDL_SCANCODE_END] = Keycode::END; +        table[SDL_SCANCODE_CAPSLOCK] = Keycode::CAPS_LOCK; +        table[SDL_SCANCODE_SCROLLLOCK] = Keycode::SCROLL_LOCK; +        table[SDL_SCANCODE_NUMLOCKCLEAR] = Keycode::NUM_LOCK; +        table[SDL_SCANCODE_PRINTSCREEN] = Keycode::PRINT_SCREEN; +        table[SDL_SCANCODE_PAUSE] = Keycode::PAUSE; +        table[SDL_SCANCODE_F1] = Keycode::F1; +        table[SDL_SCANCODE_F2] = Keycode::F2; +        table[SDL_SCANCODE_F3] = Keycode::F3; +        table[SDL_SCANCODE_F4] = Keycode::F4; +        table[SDL_SCANCODE_F5] = Keycode::F5; +        table[SDL_SCANCODE_F6] = Keycode::F6; +        table[SDL_SCANCODE_F7] = Keycode::F7; +        table[SDL_SCANCODE_F8] = Keycode::F8; +        table[SDL_SCANCODE_F9] = Keycode::F9; +        table[SDL_SCANCODE_F10] = Keycode::F10; +        table[SDL_SCANCODE_F11] = Keycode::F11; +        table[SDL_SCANCODE_F12] = Keycode::F12; +        table[SDL_SCANCODE_KP_0] = Keycode::KP0; +        table[SDL_SCANCODE_KP_1] = Keycode::KP1; +        table[SDL_SCANCODE_KP_2] = Keycode::KP2; +        table[SDL_SCANCODE_KP_3] = Keycode::KP3; +        table[SDL_SCANCODE_KP_4] = Keycode::KP4; +        table[SDL_SCANCODE_KP_5] = Keycode::KP5; +        table[SDL_SCANCODE_KP_6] = Keycode::KP6; +        table[SDL_SCANCODE_KP_7] = Keycode::KP7; +        table[SDL_SCANCODE_KP_8] = Keycode::KP8; +        table[SDL_SCANCODE_KP_9] = Keycode::KP9; +        table[SDL_SCANCODE_LSHIFT] = Keycode::LEFT_SHIFT; +        table[SDL_SCANCODE_LCTRL] = Keycode::LEFT_CONTROL; +        table[SDL_SCANCODE_LALT] = Keycode::LEFT_ALT; +        table[SDL_SCANCODE_LGUI] = Keycode::LEFT_SUPER; +        table[SDL_SCANCODE_RSHIFT] = Keycode::RIGHT_SHIFT; +        table[SDL_SCANCODE_RCTRL] = Keycode::RIGHT_CONTROL; +        table[SDL_SCANCODE_RALT] = Keycode::RIGHT_ALT; +        table[SDL_SCANCODE_RGUI] = Keycode::RIGHT_SUPER; +        table[SDL_SCANCODE_MENU] = Keycode::MENU; + +        return table; +    }(); +    return LOOKUP_TABLE; +} -	if (sdl_key < 0 || sdl_key >= SDL_NUM_SCANCODES) { -		return Keycode::NONE; -	} +// Function that uses the shared table +Keycode SDLContext::sdl_to_keycode(SDL_Keycode sdl_key) { +    if (sdl_key < 0 || sdl_key >= SDL_NUM_SCANCODES) { +        return Keycode::NONE; +    } +    return get_lookup_table()[sdl_key]; +} +std::array<bool, SDL_NUM_SCANCODES> SDLContext::get_keyboard_state() { +    // Array to hold the key states (true if pressed, false if not) +    std::array<bool, SDL_NUM_SCANCODES> keyState; + +    const Uint8* current_state = SDL_GetKeyboardState(nullptr); +	 +    for (int i = 0; i < SDL_NUM_SCANCODES; ++i) { +        // Set true if the key is pressed, false if not +        keyState[i] = currentState[i] != 0; +    } -	return LOOKUP_TABLE[sdl_key]; +    return keyState;  }  MouseButton SDLContext::sdl_to_mousebutton(Uint8 sdl_button) { diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 1f83985..0f503f3 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -152,7 +152,8 @@ private:  	 * \return The corresponding `Keycode` value or `Keycode::NONE` if the key is unrecognized.  	 */  	Keycode sdl_to_keycode(SDL_Keycode sdl_key); - +	static const std::array<Keycode, SDL_NUM_SCANCODES>& get_lookup_table(); +	std::array<Keycode, SDL_NUM_SCANCODES> get_keyboard_state();  	/**  	 * \brief Converts an SDL mouse button code to the custom MouseButton type.  	 * diff --git a/src/crepe/system/InputSystem.cpp b/src/crepe/system/InputSystem.cpp index b7d2eb4..c3bf4d4 100644 --- a/src/crepe/system/InputSystem.cpp +++ b/src/crepe/system/InputSystem.cpp @@ -13,6 +13,7 @@ void InputSystem::update() {  	RefVector<Button> buttons = mgr.get_components_by_type<Button>();  	RefVector<Camera> cameras = mgr.get_components_by_type<Camera>();  	OptionalRef<Camera> curr_cam_ref; +  	// Find the active camera  	for (Camera & cam : cameras) {  		if (!cam.active) continue; @@ -20,122 +21,126 @@ void InputSystem::update() {  		break;  	}  	if (!curr_cam_ref) return; +  	Camera & current_cam = curr_cam_ref;  	RefVector<Transform> transform_vec  		= mgr.get_components_by_id<Transform>(current_cam.game_object_id);  	Transform & cam_transform = transform_vec.front().get(); -	int camera_origin_x = cam_transform.position.x + current_cam.data.postion_offset.x -						  - (current_cam.viewport_size.x / 2); -	int camera_origin_y =  +  	ivec2 camera_origin;  	camera_origin.y = cam_transform.position.y + current_cam.data.postion_offset.y  						  - (current_cam.viewport_size.y / 2); -	camera_origin +	camera_origin.x = cam_transform.position.x + current_cam.data.postion_offset.x +						  - (current_cam.viewport_size.x / 2); +  	for (const SDLContext::EventData & event : event_list) { -		int adjusted_mouse_x = event.mouse_data.mouse_position.x + camera_origin_x; -		int adjusted_mouse_y = event.mouse_data.mouse_position.y + camera_origin_y; -		// check if the mouse is within the viewport -		bool mouse_in_viewport -			= !(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); - -		switch (event.event_type) { -			case SDLContext::EventType::KEYDOWN: -				event_mgr.queue_event<KeyPressEvent>(KeyPressEvent{ -					.repeat = event.key_data.key_repeat, -					.key = event.key_data.key, -				}); -				break; -			case SDLContext::EventType::KEYUP: -				event_mgr.queue_event<KeyReleaseEvent>(KeyReleaseEvent{ -					.key = event.key_data.key, -				}); -				break; -			case SDLContext::EventType::MOUSEDOWN: -				if (!mouse_in_viewport) { +		// Only calculate mouse coordinates for relevant events +		if (event.event_type == SDLContext::EventType::MOUSEDOWN  +			|| event.event_type == SDLContext::EventType::MOUSEUP +			|| event.event_type == SDLContext::EventType::MOUSEMOVE +			|| event.event_type == SDLContext::EventType::MOUSEWHEEL) { + +			int adjusted_mouse_x = event.mouse_data.mouse_position.x + camera_origin.x; +			int adjusted_mouse_y = event.mouse_data.mouse_position.y + camera_origin.y; + +			// Check if the mouse is within the viewport +			bool mouse_in_viewport = !(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); + +			if (!mouse_in_viewport) continue; + +			// Handle mouse-specific events +			switch (event.event_type) { +				case SDLContext::EventType::MOUSEDOWN: +					event_mgr.queue_event<MousePressEvent>({ +						.mouse_pos = {adjusted_mouse_x, adjusted_mouse_y}, +						.button = event.mouse_data.mouse_button, +					}); +					this->last_mouse_down_position = {adjusted_mouse_x, adjusted_mouse_y}; +					this->last_mouse_button = event.mouse_data.mouse_button;  					break; -				} -				event_mgr.queue_event<MousePressEvent>(MousePressEvent{ -					.mouse_pos = {adjusted_mouse_x,adjusted_mouse_y}, -					.button = event.mouse_data.mouse_button, -				}); -				this->last_mouse_down_position = {adjusted_mouse_x, adjusted_mouse_y}; -				this->last_mouse_button = event.mouse_data.mouse_button; -				break; -			case SDLContext::EventType::MOUSEUP: { -				if (!mouse_in_viewport) { + +				case SDLContext::EventType::MOUSEUP: { +					event_mgr.queue_event<MouseReleaseEvent>({ +						.mouse_pos = {adjusted_mouse_x, adjusted_mouse_y}, +						.button = event.mouse_data.mouse_button, +					}); +					int delta_x = adjusted_mouse_x - this->last_mouse_down_position.x; +					int delta_y = adjusted_mouse_y - this->last_mouse_down_position.y; + +					if (this->last_mouse_button == event.mouse_data.mouse_button +						&& std::abs(delta_x) <= click_tolerance +						&& std::abs(delta_y) <= click_tolerance) { +						event_mgr.queue_event<MouseClickEvent>({ +							.mouse_pos = {adjusted_mouse_x, adjusted_mouse_y}, +							.button = event.mouse_data.mouse_button, +						}); +						this->handle_click(event.mouse_data.mouse_button, adjusted_mouse_x, adjusted_mouse_y); +					}  					break;  				} -				event_mgr.queue_event<MouseReleaseEvent>(MouseReleaseEvent{ -					.mouse_pos = {adjusted_mouse_x,adjusted_mouse_y}, -					.button = event.mouse_data.mouse_button, -				}); -				int delta_x = adjusted_mouse_x - this->last_mouse_down_position.x; -				int delta_y = adjusted_mouse_y - this->last_mouse_down_position.y; - -				if (this->last_mouse_button == event.mouse_data.mouse_button -					&& std::abs(delta_x) <= click_tolerance -					&& std::abs(delta_y) <= click_tolerance) { -					event_mgr.queue_event<MouseClickEvent>(MouseClickEvent{ -						.mouse_pos = {adjusted_mouse_x,adjusted_mouse_y}, -						.button = event.mouse_data.mouse_button, + +				case SDLContext::EventType::MOUSEMOVE: +					event_mgr.queue_event<MouseMoveEvent>({ +						.mouse_pos = {adjusted_mouse_x, adjusted_mouse_y}, +						.mouse_delta = event.mouse_data.rel_mouse_move,  					}); +					this->handle_move(event, adjusted_mouse_x, adjusted_mouse_y); +					break; -					this->handle_click(event.mouse_data.mouse_button, adjusted_mouse_x, adjusted_mouse_y); -				} -			} break; -			case SDLContext::EventType::MOUSEMOVE: -				if (!mouse_in_viewport) { +				case SDLContext::EventType::MOUSEWHEEL: +					event_mgr.queue_event<MouseScrollEvent>({ +						.mouse_pos = {adjusted_mouse_x, adjusted_mouse_y}, +						.scroll_direction = event.mouse_data.scroll_direction, +						.scroll_delta = event.mouse_data.scroll_delta, +					});  					break; -				} -				event_mgr.queue_event<MouseMoveEvent>(MouseMoveEvent{ -					.mouse_pos = {adjusted_mouse_x,adjusted_mouse_y}, -					.mouse_delta = event.mouse_data.rel_mouse_move, -				}); -				this->handle_move(event, adjusted_mouse_x, adjusted_mouse_y); -				break; -			case SDLContext::EventType::MOUSEWHEEL: -				event_mgr.queue_event<MouseScrollEvent>(MouseScrollEvent{ -					.mouse_pos = {adjusted_mouse_x,adjusted_mouse_y}, -					.scroll_direction = event.mouse_data.scroll_direction, -					.scroll_delta = event.mouse_data.scroll_delta, -				}); -				break; -			case SDLContext::EventType::SHUTDOWN: -				event_mgr.queue_event<ShutDownEvent>(ShutDownEvent{}); -				break; -			case SDLContext::EventType::WINDOW_EXPOSE: -				event_mgr.queue_event<WindowExposeEvent>(WindowExposeEvent{}); -				break; -            case SDLContext::EventType::WINDOW_RESIZE: -				event_mgr.queue_event<WindowResizeEvent>(WindowResizeEvent{ -					.dimensions = event.window_data.resize_dimension, -				}); -				break; -            case SDLContext::EventType::WINDOW_MOVE: -				event_mgr.queue_event<WindowMoveEvent>(WindowMoveEvent{ -					.delta_move = event.window_data.move_delta, -				}); -				break; -            case SDLContext::EventType::WINDOW_MINIMIZE: -				event_mgr.queue_event<WindowMinimizeEvent>(WindowMinimizeEvent{}); -				break; -            case SDLContext::EventType::WINDOW_MAXIMIZE: -				event_mgr.queue_event<WindowMaximizeEvent>(WindowMaximizeEvent{}); -				break; -            case SDLContext::EventType::WINDOW_FOCUS_GAIN: -				event_mgr.queue_event<WindowFocusGainEvent>(WindowFocusGainEvent{}); -				break; -            case SDLContext::EventType::WINDOW_FOCUS_LOST: -				event_mgr.queue_event<WindowFocusLostEvent>(WindowFocusLostEvent{}); -				break; -			default: -				break; + +				default: +					break; +			} +		} else { +			// Handle non-mouse events +			switch (event.event_type) { +				case SDLContext::EventType::KEYDOWN: +					event_mgr.queue_event<KeyPressEvent>({.repeat = event.key_data.key_repeat, .key = event.key_data.key}); +					break; +				case SDLContext::EventType::KEYUP: +					event_mgr.queue_event<KeyReleaseEvent>({.key = event.key_data.key}); +					break; +				case SDLContext::EventType::SHUTDOWN: +					event_mgr.queue_event<ShutDownEvent>({}); +					break; +				case SDLContext::EventType::WINDOW_EXPOSE: +					event_mgr.queue_event<WindowExposeEvent>({}); +					break; +				case SDLContext::EventType::WINDOW_RESIZE: +					event_mgr.queue_event<WindowResizeEvent>({.dimensions = event.window_data.resize_dimension}); +					break; +				case SDLContext::EventType::WINDOW_MOVE: +					event_mgr.queue_event<WindowMoveEvent>({.delta_move = event.window_data.move_delta}); +					break; +				case SDLContext::EventType::WINDOW_MINIMIZE: +					event_mgr.queue_event<WindowMinimizeEvent>({}); +					break; +				case SDLContext::EventType::WINDOW_MAXIMIZE: +					event_mgr.queue_event<WindowMaximizeEvent>({}); +					break; +				case SDLContext::EventType::WINDOW_FOCUS_GAIN: +					event_mgr.queue_event<WindowFocusGainEvent>({}); +					break; +				case SDLContext::EventType::WINDOW_FOCUS_LOST: +					event_mgr.queue_event<WindowFocusLostEvent>({}); +					break; +				default: +					break; +			}  		}  	}  } +  void InputSystem::handle_move(const SDLContext::EventData & event_data,  							  const int adjusted_mouse_x, const int adjusted_mouse_y) {  	ComponentManager & mgr = this->mediator.component_manager; |