From edf14ac019b0c2ac2cd01a3cd5d1fd55004509b1 Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Tue, 15 Apr 2025 15:27:22 +0200 Subject: [PATCH] Make F4/F5 adding/removing controllers a full feature instead of an accidentally pushed debug tool --- src/core/libraries/system/userservice.cpp | 2 +- src/input/controller.h | 5 +--- src/sdl_window.cpp | 35 +++++++++++++++-------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/core/libraries/system/userservice.cpp b/src/core/libraries/system/userservice.cpp index 5381b4d64..843ea583f 100644 --- a/src/core/libraries/system/userservice.cpp +++ b/src/core/libraries/system/userservice.cpp @@ -588,7 +588,7 @@ s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(OrbisUserServiceLoginUserIdLis // TODO only first user, do the others as well for (int i = 0; i < 4; i++) { auto controllers = *Common::Singleton::Instance(); - userIdList->user_id[i] = controllers[i]->GetUserId(); + userIdList->user_id[i] = controllers[i]->user_id; } return ORBIS_OK; } diff --git a/src/input/controller.h b/src/input/controller.h index c5706e7fc..a33c3ce60 100644 --- a/src/input/controller.h +++ b/src/input/controller.h @@ -65,12 +65,10 @@ public: bool SetVibration(u8 smallMotor, u8 largeMotor); void SetTouchpadState(int touchIndex, bool touchDown, float x, float y); u32 Poll(); - u32 GetUserId() { - return user_id; - } float gyro_poll_rate; float accel_poll_rate; + u32 user_id = -1; // ORBIS_USER_SERVICE_USER_ID_INVALID static void CalculateOrientation(Libraries::Pad::OrbisFVector3& acceleration, Libraries::Pad::OrbisFVector3& angularVelocity, float deltaTime, @@ -89,7 +87,6 @@ private: u32 m_first_state = 0; std::array m_states; std::array m_private; - u32 user_id = -1; // ORBIS_USER_SERVICE_USER_ID_INVALID SDL_Gamepad* m_sdl_gamepad = nullptr; }; diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp index 526ea8f0c..718e5bb7e 100644 --- a/src/sdl_window.cpp +++ b/src/sdl_window.cpp @@ -194,21 +194,20 @@ void WindowSDL::WaitEvent() { case SDL_EVENT_GAMEPAD_AXIS_MOTION: OnGamepadEvent(&event); break; - case SDL_EVENT_GAMEPAD_SENSOR_UPDATE:{ + case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: { 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); + controllers[controller_id]->Gyro(0, event.gsensor.data); break; case SDL_SENSOR_ACCEL: - controllers[controller_id]->Acceleration( - 0, event.gsensor.data); + controllers[controller_id]->Acceleration(0, event.gsensor.data); break; default: break; } - break;} + break; + } case SDL_EVENT_QUIT: is_open = false; break; @@ -312,13 +311,25 @@ void WindowSDL::OnKeyboardMouseInput(const SDL_Event* event) { } // test controller connect/disconnect else if (input_id == SDLK_F4) { - int player_count = Config::GetNumberOfPlayers(); - AddUserServiceEvent({OrbisUserServiceEventType::Logout, player_count}); - Config::SetNumberOfPlayers(player_count - 1); + auto controllers = *Common::Singleton::Instance(); + for (int i = 3; i >= 0; i--) { + if (controllers[i]->user_id != -1) { + AddUserServiceEvent( + {OrbisUserServiceEventType::Logout, (s32)controllers[i]->user_id}); + controllers[i]->user_id = -1; + break; + } + } } else if (input_id == SDLK_F5) { - int player_count = Config::GetNumberOfPlayers(); - AddUserServiceEvent({OrbisUserServiceEventType::Login, player_count + 1}); - Config::SetNumberOfPlayers(player_count + 1); + auto controllers = *Common::Singleton::Instance(); + for (int i = 0; i < 4; i++) { + if (controllers[i]->user_id == -1) { + controllers[i]->user_id = i + 1; + AddUserServiceEvent( + {OrbisUserServiceEventType::Login, (s32)controllers[i]->user_id}); + break; + } + } } }