mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-05-14 08:12:16 +00:00
Fix merge, but for real this time (#2359)
This commit is contained in:
parent
f111395044
commit
0d498f12b9
1 changed files with 14 additions and 29 deletions
|
@ -464,35 +464,6 @@ void ControllerOutput::AddUpdate(InputEvent event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (axis != SDL_GAMEPAD_AXIS_INVALID) {
|
} else if (axis != SDL_GAMEPAD_AXIS_INVALID) {
|
||||||
auto ApplyDeadzone = [](s8* value, std::pair<int, int> deadzone) {
|
|
||||||
if (std::abs(*value) <= deadzone.first || deadzone.first == deadzone.second) {
|
|
||||||
*value = 0;
|
|
||||||
} else {
|
|
||||||
*value = (*value >= 0 ? 1 : -1) *
|
|
||||||
std::clamp((int)((128.0 * (std::abs(*value) - deadzone.first)) /
|
|
||||||
(float)(deadzone.second - deadzone.first)),
|
|
||||||
0, 128);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
switch (axis) {
|
|
||||||
case SDL_GAMEPAD_AXIS_LEFTX:
|
|
||||||
case SDL_GAMEPAD_AXIS_LEFTY:
|
|
||||||
ApplyDeadzone(&event.axis_value, leftjoystick_deadzone);
|
|
||||||
break;
|
|
||||||
case SDL_GAMEPAD_AXIS_RIGHTX:
|
|
||||||
case SDL_GAMEPAD_AXIS_RIGHTY:
|
|
||||||
ApplyDeadzone(&event.axis_value, rightjoystick_deadzone);
|
|
||||||
break;
|
|
||||||
case SDL_GAMEPAD_AXIS_LEFT_TRIGGER:
|
|
||||||
ApplyDeadzone(&event.axis_value, lefttrigger_deadzone);
|
|
||||||
break;
|
|
||||||
case SDL_GAMEPAD_AXIS_RIGHT_TRIGGER:
|
|
||||||
ApplyDeadzone(&event.axis_value, righttrigger_deadzone);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
UNREACHABLE();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*new_param = (event.active ? event.axis_value : 0) + *new_param;
|
*new_param = (event.active ? event.axis_value : 0) + *new_param;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -529,22 +500,36 @@ void ControllerOutput::FinalizeUpdate() {
|
||||||
}
|
}
|
||||||
} else if (axis != SDL_GAMEPAD_AXIS_INVALID && positive_axis) {
|
} else if (axis != SDL_GAMEPAD_AXIS_INVALID && positive_axis) {
|
||||||
// avoid double-updating axes, but don't skip directional button bindings
|
// avoid double-updating axes, but don't skip directional button bindings
|
||||||
|
auto ApplyDeadzone = [](s16* value, std::pair<int, int> deadzone) {
|
||||||
|
if (std::abs(*value) <= deadzone.first || deadzone.first == deadzone.second) {
|
||||||
|
*value = 0;
|
||||||
|
} else {
|
||||||
|
*value = (*value >= 0 ? 1 : -1) *
|
||||||
|
std::clamp((int)((128.0 * (std::abs(*value) - deadzone.first)) /
|
||||||
|
(float)(deadzone.second - deadzone.first)),
|
||||||
|
0, 128);
|
||||||
|
}
|
||||||
|
};
|
||||||
float multiplier = 1.0;
|
float multiplier = 1.0;
|
||||||
Axis c_axis = GetAxisFromSDLAxis(axis);
|
Axis c_axis = GetAxisFromSDLAxis(axis);
|
||||||
switch (c_axis) {
|
switch (c_axis) {
|
||||||
case Axis::LeftX:
|
case Axis::LeftX:
|
||||||
case Axis::LeftY:
|
case Axis::LeftY:
|
||||||
|
ApplyDeadzone(new_param, leftjoystick_deadzone);
|
||||||
multiplier = leftjoystick_halfmode ? 0.5 : 1.0;
|
multiplier = leftjoystick_halfmode ? 0.5 : 1.0;
|
||||||
break;
|
break;
|
||||||
case Axis::RightX:
|
case Axis::RightX:
|
||||||
case Axis::RightY:
|
case Axis::RightY:
|
||||||
|
ApplyDeadzone(new_param, rightjoystick_deadzone);
|
||||||
multiplier = rightjoystick_halfmode ? 0.5 : 1.0;
|
multiplier = rightjoystick_halfmode ? 0.5 : 1.0;
|
||||||
break;
|
break;
|
||||||
case Axis::TriggerLeft:
|
case Axis::TriggerLeft:
|
||||||
|
ApplyDeadzone(new_param, lefttrigger_deadzone);
|
||||||
controller->Axis(0, c_axis, GetAxis(0x0, 0x80, *new_param));
|
controller->Axis(0, c_axis, GetAxis(0x0, 0x80, *new_param));
|
||||||
controller->CheckButton(0, OrbisPadButtonDataOffset::L2, *new_param > 0x20);
|
controller->CheckButton(0, OrbisPadButtonDataOffset::L2, *new_param > 0x20);
|
||||||
return;
|
return;
|
||||||
case Axis::TriggerRight:
|
case Axis::TriggerRight:
|
||||||
|
ApplyDeadzone(new_param, righttrigger_deadzone);
|
||||||
controller->Axis(0, c_axis, GetAxis(0x0, 0x80, *new_param));
|
controller->Axis(0, c_axis, GetAxis(0x0, 0x80, *new_param));
|
||||||
controller->CheckButton(0, OrbisPadButtonDataOffset::R2, *new_param > 0x20);
|
controller->CheckButton(0, OrbisPadButtonDataOffset::R2, *new_param > 0x20);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Add table
Reference in a new issue