From 240019fecae5224d0532d0057650f27de017ebad Mon Sep 17 00:00:00 2001 From: german77 Date: Thu, 15 Jul 2021 23:43:51 -0500 Subject: [PATCH] input_common: Make button threshold customizable --- src/input_common/sdl/sdl_impl.cpp | 6 +++--- src/yuzu/configuration/configure_input_player.cpp | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index 68672a92be..2f7ccdd373 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -660,7 +660,8 @@ public: if (params.Has("axis")) { const int axis = params.Get("axis", 0); - const float threshold = params.Get("threshold", 0.5f); + // Convert range from (0.0, 1.0) to (-1.0, 1.0) + const float threshold = (params.Get("threshold", 0.5f) - 0.5f) * 2.0f; const std::string direction_name = params.Get("direction", ""); bool trigger_if_greater; if (direction_name == "+") { @@ -933,12 +934,11 @@ Common::ParamPackage BuildAnalogParamPackageForButton(int port, std::string guid params.Set("port", port); params.Set("guid", std::move(guid)); params.Set("axis", axis); + params.Set("threshold", "0.5"); if (value > 0) { params.Set("direction", "+"); - params.Set("threshold", "0.5"); } else { params.Set("direction", "-"); - params.Set("threshold", "-0.5"); } return params; } diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index d5d624b960..0d98e09860 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -313,6 +313,16 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i buttons_param[button_id].Set("toggle", toggle_value); button_map[button_id]->setText(ButtonToText(buttons_param[button_id])); }); + if (buttons_param[button_id].Has("threshold")) { + context_menu.addAction(tr("Set threshold"), [&] { + const int button_threshold = static_cast( + buttons_param[button_id].Get("threshold", 0.5f) * 100.0f); + const int new_threshold = QInputDialog::getInt( + this, tr("Set threshold"), tr("Choose a value between 0% and 100%"), + button_threshold, 0, 100); + buttons_param[button_id].Set("threshold", new_threshold / 100.0f); + }); + } context_menu.exec(button_map[button_id]->mapToGlobal(menu_location)); ui->controllerFrame->SetPlayerInput(player_index, buttons_param, analogs_param); });