diff options
Diffstat (limited to '')
| -rw-r--r-- | src/input_common/drivers/sdl_driver.cpp | 6 | ||||
| -rw-r--r-- | src/input_common/input_poller.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_player.cpp | 26 |
3 files changed, 30 insertions, 4 deletions
diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index b031a8523..f54b91f9d 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp | |||
| @@ -811,7 +811,7 @@ AnalogMapping SDLDriver::GetAnalogMappingForDevice(const Common::ParamPackage& p | |||
| 811 | PreSetAxis(identifier, binding_left_x.value.axis); | 811 | PreSetAxis(identifier, binding_left_x.value.axis); |
| 812 | PreSetAxis(identifier, binding_left_y.value.axis); | 812 | PreSetAxis(identifier, binding_left_y.value.axis); |
| 813 | const auto left_offset_x = -GetAxis(identifier, binding_left_x.value.axis); | 813 | const auto left_offset_x = -GetAxis(identifier, binding_left_x.value.axis); |
| 814 | const auto left_offset_y = -GetAxis(identifier, binding_left_y.value.axis); | 814 | const auto left_offset_y = GetAxis(identifier, binding_left_y.value.axis); |
| 815 | mapping.insert_or_assign(Settings::NativeAnalog::LStick, | 815 | mapping.insert_or_assign(Settings::NativeAnalog::LStick, |
| 816 | BuildParamPackageForAnalog(identifier, binding_left_x.value.axis, | 816 | BuildParamPackageForAnalog(identifier, binding_left_x.value.axis, |
| 817 | binding_left_y.value.axis, | 817 | binding_left_y.value.axis, |
| @@ -822,7 +822,7 @@ AnalogMapping SDLDriver::GetAnalogMappingForDevice(const Common::ParamPackage& p | |||
| 822 | PreSetAxis(identifier, binding_left_x.value.axis); | 822 | PreSetAxis(identifier, binding_left_x.value.axis); |
| 823 | PreSetAxis(identifier, binding_left_y.value.axis); | 823 | PreSetAxis(identifier, binding_left_y.value.axis); |
| 824 | const auto left_offset_x = -GetAxis(identifier, binding_left_x.value.axis); | 824 | const auto left_offset_x = -GetAxis(identifier, binding_left_x.value.axis); |
| 825 | const auto left_offset_y = -GetAxis(identifier, binding_left_y.value.axis); | 825 | const auto left_offset_y = GetAxis(identifier, binding_left_y.value.axis); |
| 826 | mapping.insert_or_assign(Settings::NativeAnalog::LStick, | 826 | mapping.insert_or_assign(Settings::NativeAnalog::LStick, |
| 827 | BuildParamPackageForAnalog(identifier, binding_left_x.value.axis, | 827 | BuildParamPackageForAnalog(identifier, binding_left_x.value.axis, |
| 828 | binding_left_y.value.axis, | 828 | binding_left_y.value.axis, |
| @@ -837,7 +837,7 @@ AnalogMapping SDLDriver::GetAnalogMappingForDevice(const Common::ParamPackage& p | |||
| 837 | PreSetAxis(identifier, binding_right_x.value.axis); | 837 | PreSetAxis(identifier, binding_right_x.value.axis); |
| 838 | PreSetAxis(identifier, binding_right_y.value.axis); | 838 | PreSetAxis(identifier, binding_right_y.value.axis); |
| 839 | const auto right_offset_x = -GetAxis(identifier, binding_right_x.value.axis); | 839 | const auto right_offset_x = -GetAxis(identifier, binding_right_x.value.axis); |
| 840 | const auto right_offset_y = -GetAxis(identifier, binding_right_y.value.axis); | 840 | const auto right_offset_y = GetAxis(identifier, binding_right_y.value.axis); |
| 841 | mapping.insert_or_assign(Settings::NativeAnalog::RStick, | 841 | mapping.insert_or_assign(Settings::NativeAnalog::RStick, |
| 842 | BuildParamPackageForAnalog(identifier, binding_right_x.value.axis, | 842 | BuildParamPackageForAnalog(identifier, binding_right_x.value.axis, |
| 843 | binding_right_y.value.axis, right_offset_x, | 843 | binding_right_y.value.axis, right_offset_x, |
diff --git a/src/input_common/input_poller.cpp b/src/input_common/input_poller.cpp index 2f3c0735a..7f3c08597 100644 --- a/src/input_common/input_poller.cpp +++ b/src/input_common/input_poller.cpp | |||
| @@ -181,7 +181,7 @@ public: | |||
| 181 | .raw_value = input_engine->GetAxis(identifier, axis_y), | 181 | .raw_value = input_engine->GetAxis(identifier, axis_y), |
| 182 | .properties = properties_y, | 182 | .properties = properties_y, |
| 183 | }; | 183 | }; |
| 184 | // This is a workaround too keep compatibility with old yuzu versions. Vertical axis is | 184 | // This is a workaround to keep compatibility with old yuzu versions. Vertical axis is |
| 185 | // inverted on SDL compared to Nintendo | 185 | // inverted on SDL compared to Nintendo |
| 186 | if (invert_axis_y) { | 186 | if (invert_axis_y) { |
| 187 | status.y.raw_value = -status.y.raw_value; | 187 | status.y.raw_value = -status.y.raw_value; |
diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index cc0534907..9db564663 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp | |||
| @@ -488,6 +488,32 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | |||
| 488 | emulated_controller->SetStickParam(analog_id, {}); | 488 | emulated_controller->SetStickParam(analog_id, {}); |
| 489 | analog_map_buttons[analog_id][sub_button_id]->setText(tr("[not set]")); | 489 | analog_map_buttons[analog_id][sub_button_id]->setText(tr("[not set]")); |
| 490 | }); | 490 | }); |
| 491 | context_menu.addAction(tr("Center axis"), [&] { | ||
| 492 | const auto stick_value = | ||
| 493 | emulated_controller->GetSticksValues()[analog_id]; | ||
| 494 | const float offset_x = stick_value.x.properties.offset; | ||
| 495 | const float offset_y = stick_value.y.properties.offset; | ||
| 496 | float raw_value_x = stick_value.x.raw_value; | ||
| 497 | float raw_value_y = stick_value.y.raw_value; | ||
| 498 | // See Core::HID::SanitizeStick() to obtain the original raw axis value | ||
| 499 | if (std::abs(offset_x) < 0.5f) { | ||
| 500 | if (raw_value_x > 0) { | ||
| 501 | raw_value_x *= 1 + offset_x; | ||
| 502 | } else { | ||
| 503 | raw_value_x *= 1 - offset_x; | ||
| 504 | } | ||
| 505 | } | ||
| 506 | if (std::abs(offset_x) < 0.5f) { | ||
| 507 | if (raw_value_y > 0) { | ||
| 508 | raw_value_y *= 1 + offset_y; | ||
| 509 | } else { | ||
| 510 | raw_value_y *= 1 - offset_y; | ||
| 511 | } | ||
| 512 | } | ||
| 513 | param.Set("offset_x", -raw_value_x + offset_x); | ||
| 514 | param.Set("offset_y", -raw_value_y + offset_y); | ||
| 515 | emulated_controller->SetStickParam(analog_id, param); | ||
| 516 | }); | ||
| 491 | context_menu.addAction(tr("Invert axis"), [&] { | 517 | context_menu.addAction(tr("Invert axis"), [&] { |
| 492 | if (sub_button_id == 2 || sub_button_id == 3) { | 518 | if (sub_button_id == 2 || sub_button_id == 3) { |
| 493 | const bool invert_value = param.Get("invert_x", "+") == "-"; | 519 | const bool invert_value = param.Get("invert_x", "+") == "-"; |