mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -05:00 
			
		
		
		
	Added deadzone controls for sdl engine at input settings
This commit is contained in:
		| @@ -236,6 +236,8 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|         widget->setVisible(false); | ||||
|  | ||||
|     analog_map_stick = {ui->buttonLStickAnalog, ui->buttonRStickAnalog}; | ||||
|     analog_map_deadzone = {ui->sliderLStickDeadzone, ui->sliderRStickDeadzone}; | ||||
|     analog_map_deadzone_label = {ui->labelLStickDeadzone, ui->labelRStickDeadzone}; | ||||
|  | ||||
|     for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; button_id++) { | ||||
|         auto* const button = button_map[button_id]; | ||||
| @@ -246,23 +248,23 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|         button->setContextMenuPolicy(Qt::CustomContextMenu); | ||||
|         connect(button, &QPushButton::clicked, [=] { | ||||
|             HandleClick(button_map[button_id], | ||||
|                         [=](Common::ParamPackage params) { | ||||
|                             // Workaround for ZL & ZR for analog triggers like on XBOX controllors. | ||||
|                             // Analog triggers (from controllers like the XBOX controller) would not | ||||
|                             // work due to a different range of their signals (from 0 to 255 on | ||||
|                             // analog triggers instead of -32768 to 32768 on analog joysticks). The | ||||
|                             // SDL driver misinterprets analog triggers as analog joysticks. | ||||
|                             // TODO: reinterpret the signal range for analog triggers to map the | ||||
|                             // values correctly. This is required for the correct emulation of the | ||||
|                             // analog triggers of the GameCube controller. | ||||
|                             if (button_id == Settings::NativeButton::ZL || | ||||
|                                 button_id == Settings::NativeButton::ZR) { | ||||
|                                 params.Set("direction", "+"); | ||||
|                                 params.Set("threshold", "0.5"); | ||||
|                             } | ||||
|                             buttons_param[button_id] = std::move(params); | ||||
|                         }, | ||||
|                         InputCommon::Polling::DeviceType::Button); | ||||
|                 [=](Common::ParamPackage params) { | ||||
|                     // Workaround for ZL & ZR for analog triggers like on XBOX controllors. | ||||
|                     // Analog triggers (from controllers like the XBOX controller) would not | ||||
|                     // work due to a different range of their signals (from 0 to 255 on | ||||
|                     // analog triggers instead of -32768 to 32768 on analog joysticks). The | ||||
|                     // SDL driver misinterprets analog triggers as analog joysticks. | ||||
|                     // TODO: reinterpret the signal range for analog triggers to map the | ||||
|                     // values correctly. This is required for the correct emulation of the | ||||
|                     // analog triggers of the GameCube controller. | ||||
|                     if (button_id == Settings::NativeButton::ZL || | ||||
|                         button_id == Settings::NativeButton::ZR) { | ||||
|                         params.Set("direction", "+"); | ||||
|                         params.Set("threshold", "0.5"); | ||||
|                     } | ||||
|                     buttons_param[button_id] = std::move(params); | ||||
|                 }, | ||||
|                 InputCommon::Polling::DeviceType::Button); | ||||
|         }); | ||||
|         connect(button, &QPushButton::customContextMenuRequested, [=](const QPoint& menu_location) { | ||||
|             QMenu context_menu; | ||||
| @@ -289,11 +291,11 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|             analog_button->setContextMenuPolicy(Qt::CustomContextMenu); | ||||
|             connect(analog_button, &QPushButton::clicked, [=]() { | ||||
|                 HandleClick(analog_map_buttons[analog_id][sub_button_id], | ||||
|                             [=](const Common::ParamPackage& params) { | ||||
|                                 SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                                 analog_sub_buttons[sub_button_id]); | ||||
|                             }, | ||||
|                             InputCommon::Polling::DeviceType::Button); | ||||
|                     [=](const Common::ParamPackage& params) { | ||||
|                         SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                         analog_sub_buttons[sub_button_id]); | ||||
|                     }, | ||||
|                     InputCommon::Polling::DeviceType::Button); | ||||
|             }); | ||||
|             connect(analog_button, &QPushButton::customContextMenuRequested, | ||||
|                     [=](const QPoint& menu_location) { | ||||
| @@ -326,6 +328,11 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i | ||||
|                     InputCommon::Polling::DeviceType::Analog); | ||||
|             } | ||||
|         }); | ||||
|         connect(analog_map_deadzone[analog_id], &QSlider::valueChanged, [=] { | ||||
|             const float deadzone = analog_map_deadzone[analog_id]->value() / 100.0f; | ||||
|             analog_map_deadzone_label[analog_id]->setText(tr("Deadzone: %1").arg(deadzone)); | ||||
|             analogs_param[analog_id].Set("deadzone", deadzone); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     connect(ui->buttonClearAll, &QPushButton::clicked, [this] { ClearAll(); }); | ||||
| @@ -484,7 +491,7 @@ void ConfigureInputPlayer::ClearAll() { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             analogs_param[analog_id].Erase(analog_sub_buttons[sub_button_id]); | ||||
|             analogs_param[analog_id].Clear(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -508,6 +515,23 @@ void ConfigureInputPlayer::UpdateButtonLabels() { | ||||
|                 AnalogToText(analogs_param[analog_id], analog_sub_buttons[sub_button_id])); | ||||
|         } | ||||
|         analog_map_stick[analog_id]->setText(tr("Set Analog Stick")); | ||||
|  | ||||
|         auto& const param = analogs_param[analog_id]; | ||||
|         auto* const analog_deadzone_slider = analog_map_deadzone[analog_id]; | ||||
|         auto* const analog_deadzone_label = analog_map_deadzone_label[analog_id]; | ||||
|  | ||||
|         if (param.Has("engine") && param.Get("engine", "") == "sdl") { | ||||
|             if (!param.Has("deadzone")) { | ||||
|                 param.Set("deadzone", 0.1f); | ||||
|             } | ||||
|  | ||||
|             analog_deadzone_slider->setValue(static_cast<int>(param.Get("deadzone", 0.1f) * 100)); | ||||
|             analog_deadzone_slider->setVisible(true); | ||||
|             analog_deadzone_label->setVisible(true); | ||||
|         } else { | ||||
|             analog_deadzone_slider->setVisible(false); | ||||
|             analog_deadzone_label->setVisible(false); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -571,4 +595,4 @@ void ConfigureInputPlayer::keyPressEvent(QKeyEvent* event) { | ||||
|         } | ||||
|     } | ||||
|     SetPollingResult({}, true); | ||||
| } | ||||
| } | ||||
| @@ -97,6 +97,8 @@ private: | ||||
|     /// Analog inputs are also represented each with a single button, used to configure with an | ||||
|     /// actual analog stick | ||||
|     std::array<QPushButton*, Settings::NativeAnalog::NumAnalogs> analog_map_stick; | ||||
|     std::array<QSlider*, Settings::NativeAnalog::NumAnalogs> analog_map_deadzone; | ||||
|     std::array<QLabel*, Settings::NativeAnalog::NumAnalogs> analog_map_deadzone_label; | ||||
|  | ||||
|     static const std::array<std::string, ANALOG_SUB_BUTTONS_NUM> analog_sub_buttons; | ||||
|  | ||||
|   | ||||
| @@ -170,6 +170,44 @@ | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|         <item row="4" column="0" colspan="2"> | ||||
|          <layout class="QVBoxLayout" name="sliderRStickDeadzoneVerticalLayout"> | ||||
|           <item> | ||||
|            <layout class="QHBoxLayout" name="sliderRStickDeadzoneHorizontalLayout"> | ||||
|             <item> | ||||
|              <widget class="QLabel" name="labelRStickDeadzone"> | ||||
|               <property name="text"> | ||||
|                <string>Deadzone: 0</string> | ||||
|               </property> | ||||
|               <property name="alignment"> | ||||
|                <enum>Qt::AlignHCenter</enum> | ||||
|               </property> | ||||
|              </widget> | ||||
|             </item> | ||||
|            </layout> | ||||
|           </item> | ||||
|           <item> | ||||
|            <widget class="QSlider" name="sliderRStickDeadzone"> | ||||
|             <property name="orientation"> | ||||
|              <enum>Qt::Horizontal</enum> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|         <item row="5" column="0"> | ||||
|          <spacer name="RStick_verticalSpacer"> | ||||
|           <property name="orientation"> | ||||
|            <enum>Qt::Vertical</enum> | ||||
|           </property> | ||||
|           <property name="sizeHint" stdset="0"> | ||||
|            <size> | ||||
|             <width>0</width> | ||||
|             <height>0</height> | ||||
|            </size> | ||||
|           </property> | ||||
|          </spacer> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
| @@ -745,6 +783,47 @@ | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|         <item row="5" column="1" colspan="2"> | ||||
|          <layout class="QVBoxLayout" name="sliderLStickDeadzoneVerticalLayout"> | ||||
|           <property name="sizeConstraint"> | ||||
|            <enum>QLayout::SetDefaultConstraint</enum> | ||||
|           </property> | ||||
|           <item> | ||||
|            <layout class="QHBoxLayout" name="sliderLStickDeadzoneHorizontalLayout"> | ||||
|             <item> | ||||
|              <widget class="QLabel" name="labelLStickDeadzone"> | ||||
|               <property name="text"> | ||||
|                <string>Deadzone: 0</string> | ||||
|               </property> | ||||
|               <property name="alignment"> | ||||
|                <enum>Qt::AlignHCenter</enum> | ||||
|               </property> | ||||
|              </widget> | ||||
|             </item> | ||||
|            </layout> | ||||
|           </item> | ||||
|           <item> | ||||
|            <widget class="QSlider" name="sliderLStickDeadzone"> | ||||
|             <property name="orientation"> | ||||
|              <enum>Qt::Horizontal</enum> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|         <item row="6" column="1"> | ||||
|          <spacer name="LStick_verticalSpacer"> | ||||
|           <property name="orientation"> | ||||
|            <enum>Qt::Vertical</enum> | ||||
|           </property> | ||||
|           <property name="sizeHint" stdset="0"> | ||||
|            <size> | ||||
|             <width>0</width> | ||||
|             <height>0</height> | ||||
|            </size> | ||||
|           </property> | ||||
|          </spacer> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 CJBok
					CJBok