mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-06-10 11:45:00 -06:00
Do not log out user on pad disconnect (#4532)
* Do not log out user on pad disconnect * refactor connection reporting * update hotkeys
This commit is contained in:
parent
b4097221fa
commit
6af6ab12d8
@ -735,7 +735,6 @@ int PS4_SYSV_ABI scePadSetVibration(s32 handle, const OrbisPadVibrationParam* pP
|
||||
if (pParam != nullptr) {
|
||||
LOG_DEBUG(Lib_Pad, "scePadSetVibration called handle = {} data = {} , {}", handle,
|
||||
pParam->smallMotor, pParam->largeMotor);
|
||||
auto& controllers = *Common::Singleton<GameControllers>::Instance();
|
||||
controller.SetVibration(pParam->smallMotor, pParam->largeMotor);
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
@ -232,6 +232,17 @@ void GameControllers::CalculateOrientation(Libraries::Pad::OrbisFVector3& accele
|
||||
orientation.y, orientation.z, orientation.w);
|
||||
}
|
||||
|
||||
void GameController::ConnectController(SDL_Gamepad* pad) {
|
||||
m_sdl_gamepad = pad;
|
||||
m_connected_count = 1;
|
||||
m_connected = true;
|
||||
}
|
||||
void GameController::DisconnectController() {
|
||||
m_sdl_gamepad = nullptr;
|
||||
m_connected_count = 0;
|
||||
m_connected = false;
|
||||
}
|
||||
|
||||
bool is_first_check = true;
|
||||
|
||||
void GameControllers::TryOpenSDLControllers() {
|
||||
@ -260,9 +271,8 @@ void GameControllers::TryOpenSDLControllers() {
|
||||
}
|
||||
if (!still_connected) {
|
||||
auto u = UserManagement.GetUserByID(controllers[i]->user_id);
|
||||
UserManagement.LogoutUser(u);
|
||||
SDL_CloseGamepad(pad);
|
||||
controllers[i]->m_sdl_gamepad = nullptr;
|
||||
controllers[i]->DisconnectController();
|
||||
controllers[i]->user_id = -1;
|
||||
slot_taken[i] = false;
|
||||
}
|
||||
@ -288,12 +298,12 @@ void GameControllers::TryOpenSDLControllers() {
|
||||
// Player N won't be registered at all
|
||||
}
|
||||
auto* c = controllers[i];
|
||||
c->m_sdl_gamepad = pad;
|
||||
LOG_INFO(Input, "Gamepad registered for slot {}! Handle: {}", i,
|
||||
SDL_GetGamepadID(pad));
|
||||
c->user_id = u->user_id;
|
||||
slot_taken[i] = true;
|
||||
c->user_id = u->user_id;
|
||||
UserManagement.LoginUser(u, i + 1);
|
||||
c->ConnectController(pad);
|
||||
if (EmulatorSettings.IsMotionControlsEnabled()) {
|
||||
if (SDL_SetGamepadSensorEnabled(c->m_sdl_gamepad, SDL_SENSOR_GYRO, true)) {
|
||||
c->gyro_poll_rate =
|
||||
@ -321,6 +331,7 @@ void GameControllers::TryOpenSDLControllers() {
|
||||
if (controller_count - move_count == 0) {
|
||||
auto u = UserManagement.GetUserByPlayerIndex(1);
|
||||
controllers[0]->user_id = u->user_id;
|
||||
controllers[0]->ConnectController(nullptr);
|
||||
UserManagement.LoginUser(u, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,6 +114,8 @@ class GameController {
|
||||
public:
|
||||
GameController();
|
||||
virtual ~GameController() = default;
|
||||
void ConnectController(SDL_Gamepad* pad);
|
||||
void DisconnectController();
|
||||
|
||||
void ReadState(State* state, bool* isConnected, int* connectedCount);
|
||||
int ReadStates(State* states, int states_num, bool* isConnected, int* connectedCount);
|
||||
@ -155,8 +157,8 @@ public:
|
||||
private:
|
||||
void PushState();
|
||||
|
||||
bool m_connected = true;
|
||||
int m_connected_count = 1;
|
||||
bool m_connected = false;
|
||||
int m_connected_count = 0;
|
||||
u8 m_touch_count = 0;
|
||||
u8 m_secondary_touch_count = 0;
|
||||
u8 m_previous_touchnum = 0;
|
||||
@ -178,10 +180,7 @@ class GameControllers {
|
||||
public:
|
||||
GameControllers()
|
||||
: controllers({new GameController(), new GameController(), new GameController(),
|
||||
new GameController(), new GameController()}) {
|
||||
controllers[4]->m_connected = false;
|
||||
controllers[4]->m_connected_count = 0;
|
||||
};
|
||||
new GameController(), new GameController()}) {};
|
||||
virtual ~GameControllers() = default;
|
||||
GameController* operator[](const size_t& i) const {
|
||||
if (i > 4) {
|
||||
|
||||
@ -269,6 +269,7 @@ void WindowSDL::WaitEvent() {
|
||||
break;
|
||||
}
|
||||
controllers[i]->user_id = u->user_id;
|
||||
controllers[i]->ConnectController(controllers[i]->m_sdl_gamepad);
|
||||
UserManagement.LoginUser(u, i + 1);
|
||||
break;
|
||||
}
|
||||
@ -279,6 +280,7 @@ void WindowSDL::WaitEvent() {
|
||||
for (int i = 3; i >= 0; i--) {
|
||||
if (controllers[i]->user_id != -1) {
|
||||
UserManagement.LogoutUser(UserManagement.GetUserByID(controllers[i]->user_id));
|
||||
controllers[i]->DisconnectController();
|
||||
controllers[i]->user_id = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user