mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-29 05:24:41 +00:00
Make motion controls work with multiple controllers
This commit is contained in:
parent
fa27744588
commit
ce359b5b4d
@ -271,11 +271,10 @@ void GameControllers::TryOpenSDLControllers(GameControllers& controllers) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now, add any new controllers not already assigned
|
|
||||||
for (int j = 0; j < controller_count; j++) {
|
for (int j = 0; j < controller_count; j++) {
|
||||||
SDL_JoystickID id = new_joysticks[j];
|
SDL_JoystickID id = new_joysticks[j];
|
||||||
if (assigned_ids.contains(id))
|
if (assigned_ids.contains(id))
|
||||||
continue; // already handled
|
continue;
|
||||||
|
|
||||||
SDL_Gamepad* pad = SDL_OpenGamepad(id);
|
SDL_Gamepad* pad = SDL_OpenGamepad(id);
|
||||||
if (!pad)
|
if (!pad)
|
||||||
@ -288,6 +287,27 @@ void GameControllers::TryOpenSDLControllers(GameControllers& controllers) {
|
|||||||
slot_taken[i] = true;
|
slot_taken[i] = true;
|
||||||
AddUserServiceEvent(
|
AddUserServiceEvent(
|
||||||
{OrbisUserServiceEventType::Login, SDL_GetGamepadPlayerIndex(pad) + 1});
|
{OrbisUserServiceEventType::Login, SDL_GetGamepadPlayerIndex(pad) + 1});
|
||||||
|
|
||||||
|
if (SDL_SetGamepadSensorEnabled(controllers[i]->m_sdl_gamepad, SDL_SENSOR_GYRO,
|
||||||
|
true)) {
|
||||||
|
controllers[i]->gyro_poll_rate = SDL_GetGamepadSensorDataRate(
|
||||||
|
controllers[i]->m_sdl_gamepad, SDL_SENSOR_GYRO);
|
||||||
|
LOG_INFO(Input, "Gyro initialized, poll rate: {}",
|
||||||
|
controllers[i]->gyro_poll_rate);
|
||||||
|
} else {
|
||||||
|
LOG_ERROR(Input, "Failed to initialize gyro controls for gamepad {}",
|
||||||
|
controllers[i]->user_id);
|
||||||
|
}
|
||||||
|
if (SDL_SetGamepadSensorEnabled(controllers[i]->m_sdl_gamepad, SDL_SENSOR_ACCEL,
|
||||||
|
true)) {
|
||||||
|
controllers[i]->accel_poll_rate = SDL_GetGamepadSensorDataRate(
|
||||||
|
controllers[i]->m_sdl_gamepad, SDL_SENSOR_ACCEL);
|
||||||
|
LOG_INFO(Input, "Accel initialized, poll rate: {}",
|
||||||
|
controllers[i]->accel_poll_rate);
|
||||||
|
} else {
|
||||||
|
LOG_ERROR(Input, "Failed to initialize accel controls for gamepad {}",
|
||||||
|
controllers[i]->user_id);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -194,6 +194,21 @@ void WindowSDL::WaitEvent() {
|
|||||||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||||
OnGamepadEvent(&event);
|
OnGamepadEvent(&event);
|
||||||
break;
|
break;
|
||||||
|
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);
|
||||||
|
break;
|
||||||
|
case SDL_SENSOR_ACCEL:
|
||||||
|
controllers[controller_id]->Acceleration(
|
||||||
|
0, event.gsensor.data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;}
|
||||||
case SDL_EVENT_QUIT:
|
case SDL_EVENT_QUIT:
|
||||||
is_open = false;
|
is_open = false;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user