mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-27 12:34:37 +00:00
Make non-remappable inputs work
This commit is contained in:
parent
8cc101b3b0
commit
c1bb630dfd
@ -472,11 +472,11 @@ InputEvent InputBinding::GetInputEventFromSDLEvent(const SDL_Event& e) {
|
|||||||
e.type == SDL_EVENT_MOUSE_WHEEL, 0);
|
e.type == SDL_EVENT_MOUSE_WHEEL, 0);
|
||||||
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
||||||
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
||||||
gamepad = SDL_GetGamepadPlayerIndex(SDL_GetGamepadFromID(e.gbutton.which));
|
gamepad = GetGamepadIndexFromJoystickId(e.gbutton.which);
|
||||||
return InputEvent({InputType::Controller, (u32)e.gbutton.button, gamepad}, e.gbutton.down,
|
return InputEvent({InputType::Controller, (u32)e.gbutton.button, gamepad}, e.gbutton.down,
|
||||||
0);
|
0);
|
||||||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||||
gamepad = SDL_GetGamepadPlayerIndex(SDL_GetGamepadFromID(e.gaxis.which));
|
gamepad = GetGamepadIndexFromJoystickId(e.gaxis.which);
|
||||||
return InputEvent({InputType::Axis, (u32)e.gaxis.axis, gamepad}, true, e.gaxis.value / 256);
|
return InputEvent({InputType::Axis, (u32)e.gaxis.axis, gamepad}, true, e.gaxis.value / 256);
|
||||||
default:
|
default:
|
||||||
return InputEvent();
|
return InputEvent();
|
||||||
@ -761,4 +761,8 @@ void ActivateOutputsFromInputs() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u8 GetGamepadIndexFromJoystickId(SDL_JoystickID id) {
|
||||||
|
return SDL_GetGamepadPlayerIndex(SDL_GetGamepadFromID(id));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Input
|
} // namespace Input
|
||||||
|
@ -471,4 +471,6 @@ bool UpdatePressedKeys(InputEvent event);
|
|||||||
|
|
||||||
void ActivateOutputsFromInputs();
|
void ActivateOutputsFromInputs();
|
||||||
|
|
||||||
|
u8 GetGamepadIndexFromJoystickId(SDL_JoystickID id);
|
||||||
|
|
||||||
} // namespace Input
|
} // namespace Input
|
||||||
|
@ -190,32 +190,11 @@ void WindowSDL::WaitEvent() {
|
|||||||
// todo handle userserviceevents here
|
// todo handle userserviceevents here
|
||||||
Input::GameControllers::TryOpenSDLControllers(controllers);
|
Input::GameControllers::TryOpenSDLControllers(controllers);
|
||||||
break;
|
break;
|
||||||
case SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN:
|
|
||||||
case SDL_EVENT_GAMEPAD_TOUCHPAD_UP:
|
|
||||||
case SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION:
|
|
||||||
controllers[0]->SetTouchpadState(event.gtouchpad.finger,
|
|
||||||
event.type != SDL_EVENT_GAMEPAD_TOUCHPAD_UP,
|
|
||||||
event.gtouchpad.x, event.gtouchpad.y);
|
|
||||||
break;
|
|
||||||
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
||||||
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
||||||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||||
OnGamepadEvent(&event);
|
OnGamepadEvent(&event);
|
||||||
break;
|
break;
|
||||||
// i really would have appreciated ANY KIND OF DOCUMENTATION ON THIS
|
|
||||||
// AND IT DOESN'T EVEN USE PROPER ENUMS
|
|
||||||
case SDL_EVENT_GAMEPAD_SENSOR_UPDATE:
|
|
||||||
switch ((SDL_SensorType)event.gsensor.sensor) {
|
|
||||||
case SDL_SENSOR_GYRO:
|
|
||||||
controllers[0]->Gyro(0, event.gsensor.data);
|
|
||||||
break;
|
|
||||||
case SDL_SENSOR_ACCEL:
|
|
||||||
controllers[0]->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;
|
||||||
@ -343,10 +322,37 @@ void WindowSDL::OnGamepadEvent(const SDL_Event* event) {
|
|||||||
// as it would break the entire touchpad handling
|
// as it would break the entire touchpad handling
|
||||||
// You can still bind other things to it though
|
// You can still bind other things to it though
|
||||||
if (event->gbutton.button == SDL_GAMEPAD_BUTTON_TOUCHPAD) {
|
if (event->gbutton.button == SDL_GAMEPAD_BUTTON_TOUCHPAD) {
|
||||||
controllers[0]->CheckButton(0, OrbisPadButtonDataOffset::TouchPad, input_down);
|
controllers[Input::GetGamepadIndexFromJoystickId(event->gbutton.which)]->CheckButton(
|
||||||
|
0, OrbisPadButtonDataOffset::TouchPad, input_down);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (event->type) {
|
||||||
|
case SDL_EVENT_GAMEPAD_SENSOR_UPDATE:
|
||||||
|
switch ((SDL_SensorType)event->gsensor.sensor) {
|
||||||
|
case SDL_SENSOR_GYRO:
|
||||||
|
controllers[Input::GetGamepadIndexFromJoystickId(event->gsensor.which)]->Gyro(
|
||||||
|
0, event->gsensor.data);
|
||||||
|
break;
|
||||||
|
case SDL_SENSOR_ACCEL:
|
||||||
|
controllers[Input::GetGamepadIndexFromJoystickId(event->gsensor.which)]->Acceleration(
|
||||||
|
0, event->gsensor.data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN:
|
||||||
|
case SDL_EVENT_GAMEPAD_TOUCHPAD_UP:
|
||||||
|
case SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION:
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
// add/remove it from the list
|
// add/remove it from the list
|
||||||
bool inputs_changed = Input::UpdatePressedKeys(input_event);
|
bool inputs_changed = Input::UpdatePressedKeys(input_event);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user