diff --git a/src/input/controller.cpp b/src/input/controller.cpp index 4b19d581b..d69338236 100644 --- a/src/input/controller.cpp +++ b/src/input/controller.cpp @@ -3,7 +3,6 @@ #include #include -#include #include "common/config.h" #include "common/logging/log.h" #include "core/libraries/kernel/time.h" @@ -359,15 +358,4 @@ u32 GameController::Poll() { return 100; } -u8 GameControllers::GetGamepadIndexFromJoystickId(SDL_JoystickID id) { - auto controllers = *Common::Singleton::Instance(); - for (int i = 0; i < 4; i++) { - if (controllers[i]->m_sdl_gamepad && - SDL_GetGamepadID(controllers[i]->m_sdl_gamepad) == id) { - return i + 1; - } - } - return -1; // Not found -} - } // namespace Input diff --git a/src/input/controller.h b/src/input/controller.h index b1c0acbc3..a33c3ce60 100644 --- a/src/input/controller.h +++ b/src/input/controller.h @@ -8,8 +8,6 @@ #include "common/types.h" #include "core/libraries/pad/pad.h" -#include "SDL3/SDL_joystick.h" - struct SDL_Gamepad; namespace Input { @@ -108,8 +106,6 @@ public: return controllers[i]; } static void TryOpenSDLControllers(GameControllers& controllers); - - static u8 GetGamepadIndexFromJoystickId(SDL_JoystickID id); }; } // namespace Input diff --git a/src/input/input_handler.cpp b/src/input/input_handler.cpp index a37b26851..f757f191a 100644 --- a/src/input/input_handler.cpp +++ b/src/input/input_handler.cpp @@ -468,11 +468,11 @@ InputEvent InputBinding::GetInputEventFromSDLEvent(const SDL_Event& e) { e.type == SDL_EVENT_MOUSE_WHEEL, 0); case SDL_EVENT_GAMEPAD_BUTTON_DOWN: case SDL_EVENT_GAMEPAD_BUTTON_UP: - gamepad = Input::GameControllers::GetGamepadIndexFromJoystickId(e.gbutton.which); + gamepad = GetGamepadIndexFromJoystickId(e.gbutton.which); return InputEvent({InputType::Controller, (u32)e.gbutton.button, gamepad}, e.gbutton.down, 0); case SDL_EVENT_GAMEPAD_AXIS_MOTION: - gamepad = Input::GameControllers::GetGamepadIndexFromJoystickId(e.gaxis.which); + gamepad = GetGamepadIndexFromJoystickId(e.gaxis.which); return InputEvent({InputType::Axis, (u32)e.gaxis.axis, gamepad}, true, e.gaxis.value / 256); default: return InputEvent(); @@ -753,4 +753,8 @@ void ActivateOutputsFromInputs() { } } +u8 GetGamepadIndexFromJoystickId(SDL_JoystickID id) { + return SDL_GetGamepadPlayerIndex(SDL_GetGamepadFromID(id)) + 1; +} + } // namespace Input diff --git a/src/input/input_handler.h b/src/input/input_handler.h index 173fb341c..3484ab446 100644 --- a/src/input/input_handler.h +++ b/src/input/input_handler.h @@ -471,4 +471,6 @@ bool UpdatePressedKeys(InputEvent event); void ActivateOutputsFromInputs(); +u8 GetGamepadIndexFromJoystickId(SDL_JoystickID id); + } // namespace Input diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp index 3fb66e56f..16d8478ea 100644 --- a/src/sdl_window.cpp +++ b/src/sdl_window.cpp @@ -191,8 +191,7 @@ void WindowSDL::WaitEvent() { OnGamepadEvent(&event); break; case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: { - int controller_id = - Input::GameControllers::GetGamepadIndexFromJoystickId(event.gsensor.which) - 1; + int controller_id = Input::GetGamepadIndexFromJoystickId(event.gsensor.which) - 1; switch ((SDL_SensorType)event.gsensor.sensor) { case SDL_SENSOR_GYRO: controllers[controller_id]->Gyro(0, event.gsensor.data); @@ -355,8 +354,8 @@ void WindowSDL::OnGamepadEvent(const SDL_Event* event) { // as it would break the entire touchpad handling // You can still bind other things to it though if (event->gbutton.button == SDL_GAMEPAD_BUTTON_TOUCHPAD) { - controllers[Input::GameControllers::GetGamepadIndexFromJoystickId(event->gbutton.which)] - ->CheckButton(0, OrbisPadButtonDataOffset::TouchPad, input_down); + controllers[Input::GetGamepadIndexFromJoystickId(event->gbutton.which)]->CheckButton( + 0, OrbisPadButtonDataOffset::TouchPad, input_down); return; } @@ -364,12 +363,12 @@ void WindowSDL::OnGamepadEvent(const SDL_Event* event) { case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: switch ((SDL_SensorType)event->gsensor.sensor) { case SDL_SENSOR_GYRO: - controllers[Input::GameControllers::GetGamepadIndexFromJoystickId(event->gsensor.which)] - ->Gyro(0, event->gsensor.data); + controllers[Input::GetGamepadIndexFromJoystickId(event->gsensor.which)]->Gyro( + 0, event->gsensor.data); break; case SDL_SENSOR_ACCEL: - controllers[Input::GameControllers::GetGamepadIndexFromJoystickId(event->gsensor.which)] - ->Acceleration(0, event->gsensor.data); + controllers[Input::GetGamepadIndexFromJoystickId(event->gsensor.which)]->Acceleration( + 0, event->gsensor.data); break; default: break; @@ -378,10 +377,9 @@ void WindowSDL::OnGamepadEvent(const SDL_Event* event) { case SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN: case SDL_EVENT_GAMEPAD_TOUCHPAD_UP: case SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION: - controllers[Input::GameControllers::GetGamepadIndexFromJoystickId(event->gtouchpad.which)] - ->SetTouchpadState(event->gtouchpad.finger, - event->type != SDL_EVENT_GAMEPAD_TOUCHPAD_UP, event->gtouchpad.x, - event->gtouchpad.y); + controllers[Input::GetGamepadIndexFromJoystickId(event->gtouchpad.which)]->SetTouchpadState( + event->gtouchpad.finger, event->type != SDL_EVENT_GAMEPAD_TOUCHPAD_UP, + event->gtouchpad.x, event->gtouchpad.y); return; default: break;