diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/input_common/sdl/sdl_impl.cpp | 6 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_input_player.cpp | 44 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_input_player.ui | 44 |
3 files changed, 91 insertions, 3 deletions
diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index 7778b3562..70a0ba09c 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -707,7 +707,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 == "+") { @@ -980,12 +981,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 14579c220..6b9bd05f1 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -314,6 +314,24 @@ 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<int>( + 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); + + if (button_id == Settings::NativeButton::ZL) { + ui->sliderZLThreshold->setValue(new_threshold); + } + if (button_id == Settings::NativeButton::ZR) { + ui->sliderZRThreshold->setValue(new_threshold); + } + }); + } + context_menu.exec(button_map[button_id]->mapToGlobal(menu_location)); ui->controllerFrame->SetPlayerInput(player_index, buttons_param, analogs_param); }); @@ -342,6 +360,20 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i }); } + connect(ui->sliderZLThreshold, &QSlider::valueChanged, [=, this] { + if (buttons_param[Settings::NativeButton::ZL].Has("threshold")) { + const auto slider_value = ui->sliderZLThreshold->value(); + buttons_param[Settings::NativeButton::ZL].Set("threshold", slider_value / 100.0f); + } + }); + + connect(ui->sliderZRThreshold, &QSlider::valueChanged, [=, this] { + if (buttons_param[Settings::NativeButton::ZR].Has("threshold")) { + const auto slider_value = ui->sliderZRThreshold->value(); + buttons_param[Settings::NativeButton::ZR].Set("threshold", slider_value / 100.0f); + } + }); + for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { auto* const analog_button = analog_map_buttons[analog_id][sub_button_id]; @@ -850,6 +882,18 @@ void ConfigureInputPlayer::UpdateUI() { button_map[button]->setText(ButtonToText(buttons_param[button])); } + if (buttons_param[Settings::NativeButton::ZL].Has("threshold")) { + const int button_threshold = static_cast<int>( + buttons_param[Settings::NativeButton::ZL].Get("threshold", 0.5f) * 100.0f); + ui->sliderZLThreshold->setValue(button_threshold); + } + + if (buttons_param[Settings::NativeButton::ZR].Has("threshold")) { + const int button_threshold = static_cast<int>( + buttons_param[Settings::NativeButton::ZR].Get("threshold", 0.5f) * 100.0f); + ui->sliderZRThreshold->setValue(button_threshold); + } + for (int motion_id = 0; motion_id < Settings::NativeMotion::NumMotions; ++motion_id) { motion_map[motion_id]->setText(ButtonToText(motions_param[motion_id])); } diff --git a/src/yuzu/configuration/configure_input_player.ui b/src/yuzu/configuration/configure_input_player.ui index e76aa484f..e7433912b 100644 --- a/src/yuzu/configuration/configure_input_player.ui +++ b/src/yuzu/configuration/configure_input_player.ui @@ -1334,6 +1334,12 @@ </item> <item> <widget class="QGroupBox" name="buttonShoulderButtonsButtonZLGroup"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="title"> <string>ZL</string> </property> @@ -1378,6 +1384,22 @@ </property> </widget> </item> + <item> + <widget class="QSlider" name="sliderZLThreshold"> + <property name="maximumSize"> + <size> + <width>70</width> + <height>15</height> + </size> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> </layout> </widget> </item> @@ -1759,6 +1781,12 @@ </item> <item> <widget class="QGroupBox" name="buttonShoulderButtonsZRGroup"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="title"> <string>ZR</string> </property> @@ -1803,6 +1831,22 @@ </property> </widget> </item> + <item> + <widget class="QSlider" name="sliderZRThreshold"> + <property name="maximumSize"> + <size> + <width>70</width> + <height>15</height> + </size> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> </layout> </widget> </item> |