Просмотр исходного кода

configure_input: Hook up the vibration percentage spinbox

This allows setting the vibration strength percentage anywhere from 1% to 100%.
Also hooks up the remaining motion button and checkbox in the Controller Applet.
Morph 5 лет назад
Родитель
Сommit
652d6766d5

+ 2 - 1
src/core/hle/service/hid/controllers/npad.cpp

@@ -703,7 +703,8 @@ void Controller_NPad::VibrateController(const std::vector<DeviceHandle>& vibrati
 
 
         // TODO: Vibrate left/right vibration motors independently if possible.
         // TODO: Vibrate left/right vibration motors independently if possible.
         button_state[A - BUTTON_HID_BEGIN]->SetRumblePlay(
         button_state[A - BUTTON_HID_BEGIN]->SetRumblePlay(
-            vibration_values[i].amp_high, vibration_values[i].amp_low,
+            vibration_values[i].amp_high * Settings::values.vibration_strength.GetValue() / 100,
+            vibration_values[i].amp_low * Settings::values.vibration_strength.GetValue() / 100,
             vibration_values[i].freq_high, vibration_values[i].freq_low);
             vibration_values[i].freq_high, vibration_values[i].freq_low);
 
 
         latest_vibration_values[npad_index][device_index] = vibration_values[i];
         latest_vibration_values[npad_index][device_index] = vibration_values[i];

+ 1 - 0
src/core/settings.cpp

@@ -150,6 +150,7 @@ void RestoreGlobalState() {
     values.players.SetGlobal(true);
     values.players.SetGlobal(true);
     values.use_docked_mode.SetGlobal(true);
     values.use_docked_mode.SetGlobal(true);
     values.vibration_enabled.SetGlobal(true);
     values.vibration_enabled.SetGlobal(true);
+    values.vibration_strength.SetGlobal(true);
     values.motion_enabled.SetGlobal(true);
     values.motion_enabled.SetGlobal(true);
 }
 }
 
 

+ 1 - 0
src/core/settings.h

@@ -170,6 +170,7 @@ struct Values {
     Setting<bool> use_docked_mode;
     Setting<bool> use_docked_mode;
 
 
     Setting<bool> vibration_enabled;
     Setting<bool> vibration_enabled;
+    Setting<int> vibration_strength;
 
 
     Setting<bool> motion_enabled;
     Setting<bool> motion_enabled;
     std::string motion_device;
     std::string motion_device;

+ 4 - 0
src/yuzu/applets/controller.cpp

@@ -266,6 +266,8 @@ void QtControllerSelectorDialog::ApplyConfiguration() {
     OnDockedModeChanged(pre_docked_mode, Settings::values.use_docked_mode.GetValue());
     OnDockedModeChanged(pre_docked_mode, Settings::values.use_docked_mode.GetValue());
 
 
     Settings::values.vibration_enabled.SetValue(ui->vibrationGroup->isChecked());
     Settings::values.vibration_enabled.SetValue(ui->vibrationGroup->isChecked());
+    Settings::values.vibration_strength.SetValue(ui->vibrationSpin->value());
+    Settings::values.motion_enabled.SetValue(ui->motionGroup->isChecked());
 }
 }
 
 
 void QtControllerSelectorDialog::LoadConfiguration() {
 void QtControllerSelectorDialog::LoadConfiguration() {
@@ -281,6 +283,8 @@ void QtControllerSelectorDialog::LoadConfiguration() {
     UpdateDockedState(Settings::values.players.GetValue()[8].connected);
     UpdateDockedState(Settings::values.players.GetValue()[8].connected);
 
 
     ui->vibrationGroup->setChecked(Settings::values.vibration_enabled.GetValue());
     ui->vibrationGroup->setChecked(Settings::values.vibration_enabled.GetValue());
+    ui->vibrationSpin->setValue(Settings::values.vibration_strength.GetValue());
+    ui->motionGroup->setChecked(Settings::values.motion_enabled.GetValue());
 }
 }
 
 
 void QtControllerSelectorDialog::CallConfigureInputDialog() {
 void QtControllerSelectorDialog::CallConfigureInputDialog() {

+ 1 - 1
src/yuzu/applets/controller.ui

@@ -2349,7 +2349,7 @@
                <number>1</number>
                <number>1</number>
               </property>
               </property>
               <property name="maximum">
               <property name="maximum">
-               <number>200</number>
+               <number>100</number>
               </property>
               </property>
               <property name="value">
               <property name="value">
                <number>100</number>
                <number>100</number>

+ 4 - 0
src/yuzu/configuration/config.cpp

@@ -493,6 +493,8 @@ void Config::ReadControlValues() {
     ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode"), false);
     ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode"), false);
     ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled"),
     ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled"),
                       true);
                       true);
+    ReadSettingGlobal(Settings::values.vibration_strength, QStringLiteral("vibration_strength"),
+                      100);
     ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled"), true);
     ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled"), true);
 
 
     qt_config->endGroup();
     qt_config->endGroup();
@@ -1150,6 +1152,8 @@ void Config::SaveControlValues() {
     WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode, false);
     WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode, false);
     WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled,
     WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled,
                        true);
                        true);
+    WriteSettingGlobal(QStringLiteral("vibration_strength"), Settings::values.vibration_strength,
+                       100);
     WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled, true);
     WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled, true);
     WriteSetting(QStringLiteral("motion_device"),
     WriteSetting(QStringLiteral("motion_device"),
                  QString::fromStdString(Settings::values.motion_device),
                  QString::fromStdString(Settings::values.motion_device),

+ 2 - 0
src/yuzu/configuration/configure_input.cpp

@@ -186,6 +186,7 @@ void ConfigureInput::ApplyConfiguration() {
     OnDockedModeChanged(pre_docked_mode, Settings::values.use_docked_mode.GetValue());
     OnDockedModeChanged(pre_docked_mode, Settings::values.use_docked_mode.GetValue());
 
 
     Settings::values.vibration_enabled.SetValue(ui->vibrationGroup->isChecked());
     Settings::values.vibration_enabled.SetValue(ui->vibrationGroup->isChecked());
+    Settings::values.vibration_strength.SetValue(ui->vibrationSpin->value());
     Settings::values.motion_enabled.SetValue(ui->motionGroup->isChecked());
     Settings::values.motion_enabled.SetValue(ui->motionGroup->isChecked());
 }
 }
 
 
@@ -206,6 +207,7 @@ void ConfigureInput::LoadConfiguration() {
     UpdateDockedState(Settings::values.players.GetValue()[8].connected);
     UpdateDockedState(Settings::values.players.GetValue()[8].connected);
 
 
     ui->vibrationGroup->setChecked(Settings::values.vibration_enabled.GetValue());
     ui->vibrationGroup->setChecked(Settings::values.vibration_enabled.GetValue());
+    ui->vibrationSpin->setValue(Settings::values.vibration_strength.GetValue());
     ui->motionGroup->setChecked(Settings::values.motion_enabled.GetValue());
     ui->motionGroup->setChecked(Settings::values.motion_enabled.GetValue());
 }
 }
 
 

+ 1 - 1
src/yuzu/configuration/configure_input.ui

@@ -215,7 +215,7 @@
             <number>1</number>
             <number>1</number>
            </property>
            </property>
            <property name="maximum">
            <property name="maximum">
-            <number>200</number>
+            <number>100</number>
            </property>
            </property>
            <property name="value">
            <property name="value">
             <number>100</number>
             <number>100</number>

+ 2 - 0
src/yuzu_cmd/config.cpp

@@ -290,6 +290,8 @@ void Config::ReadValues() {
 
 
     Settings::values.vibration_enabled.SetValue(
     Settings::values.vibration_enabled.SetValue(
         sdl2_config->GetBoolean("ControlsGeneral", "vibration_enabled", true));
         sdl2_config->GetBoolean("ControlsGeneral", "vibration_enabled", true));
+    Settings::values.vibration_strength.SetValue(
+        sdl2_config->GetInteger("ControlsGeneral", "vibration_strength", 100));
     Settings::values.motion_enabled.SetValue(
     Settings::values.motion_enabled.SetValue(
         sdl2_config->GetBoolean("ControlsGeneral", "motion_enabled", true));
         sdl2_config->GetBoolean("ControlsGeneral", "motion_enabled", true));
     Settings::values.touchscreen.enabled =
     Settings::values.touchscreen.enabled =

+ 7 - 0
src/yuzu_cmd/default_ini.h

@@ -65,6 +65,13 @@ button_screenshot=
 lstick=
 lstick=
 rstick=
 rstick=
 
 
+# Whether to enable or disable vibration
+# 0: Disabled, 1 (default): Enabled
+vibration_enabled=
+
+# Vibration strength percentage (Default: 100)
+vibration_strength=
+
 # for motion input, the following devices are available:
 # for motion input, the following devices are available:
 #  - "motion_emu" (default) for emulating motion input from mouse input. Required parameters:
 #  - "motion_emu" (default) for emulating motion input from mouse input. Required parameters:
 #      - "update_period": update period in milliseconds (default to 100)
 #      - "update_period": update period in milliseconds (default to 100)

+ 1 - 0
src/yuzu_tester/config.cpp

@@ -76,6 +76,7 @@ void Config::ReadValues() {
     }
     }
 
 
     Settings::values.vibration_enabled.SetValue(true);
     Settings::values.vibration_enabled.SetValue(true);
+    Settings::values.vibration_strength.SetValue(100);
     Settings::values.motion_enabled.SetValue(true);
     Settings::values.motion_enabled.SetValue(true);
     Settings::values.touchscreen.enabled = "";
     Settings::values.touchscreen.enabled = "";
     Settings::values.touchscreen.device = "";
     Settings::values.touchscreen.device = "";