mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-04-20 03:24:49 +00:00
Make motion controls work with multiple controllers
This commit is contained in:
parent
fa27744588
commit
ce359b5b4d
2 changed files with 37 additions and 2 deletions
|
@ -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++) {
|
||||
SDL_JoystickID id = new_joysticks[j];
|
||||
if (assigned_ids.contains(id))
|
||||
continue; // already handled
|
||||
continue;
|
||||
|
||||
SDL_Gamepad* pad = SDL_OpenGamepad(id);
|
||||
if (!pad)
|
||||
|
@ -288,6 +287,27 @@ void GameControllers::TryOpenSDLControllers(GameControllers& controllers) {
|
|||
slot_taken[i] = true;
|
||||
AddUserServiceEvent(
|
||||
{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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -194,6 +194,21 @@ void WindowSDL::WaitEvent() {
|
|||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||
OnGamepadEvent(&event);
|
||||
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:
|
||||
is_open = false;
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue