From 643f82539c9bc43a8573fabee3a236bfeb67cd47 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Thu, 19 May 2022 22:19:17 -0500 Subject: ControllerEmu: Expose gate size setting for octagon analog sticks. --- .../ControllerEmu/ControlGroup/AnalogStick.cpp | 16 +++++++++++++++- .../InputCommon/ControllerEmu/ControlGroup/AnalogStick.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/ControllerEmu') diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp index aaabfa5b17..e4d74aa524 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp @@ -65,9 +65,18 @@ OctagonAnalogStick::OctagonAnalogStick(const char* name_, ControlState gate_radi OctagonAnalogStick::OctagonAnalogStick(const char* name_, const char* ui_name_, ControlState gate_radius) - : AnalogStick(name_, ui_name_, std::make_unique(gate_radius)) + : AnalogStick(name_, ui_name_, std::make_unique(1.0)) { AddVirtualNotchSetting(&m_virtual_notch_setting, 45); + + AddSetting( + &m_gate_size_setting, + {_trans("Gate Size"), + // i18n: The percent symbol. + _trans("%"), + // i18n: Refers to plastic shell of game controller (stick gate) that limits stick movements. + _trans("Adjusts target radius of simulated stick gate.")}, + gate_radius * 100, 0.01, 100); } ControlState OctagonAnalogStick::GetVirtualNotchSize() const @@ -75,4 +84,9 @@ ControlState OctagonAnalogStick::GetVirtualNotchSize() const return m_virtual_notch_setting.GetValue() * MathUtil::TAU / 360; } +ControlState OctagonAnalogStick::GetGateRadiusAtAngle(double ang) const +{ + return AnalogStick::GetGateRadiusAtAngle(ang) * m_gate_size_setting.GetValue() / 100; +} + } // namespace ControllerEmu diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.h b/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.h index d5363cecef..47e3ad5743 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.h +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.h @@ -36,9 +36,11 @@ public: OctagonAnalogStick(const char* name, const char* ui_name, ControlState gate_radius); ControlState GetVirtualNotchSize() const override; + ControlState GetGateRadiusAtAngle(double ang) const override; private: SettingValue m_virtual_notch_setting; + SettingValue m_gate_size_setting; }; } // namespace ControllerEmu -- cgit v1.2.3 From 80d9e79cf1f56101f47e528ed390243e7fe790bf Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Thu, 19 May 2022 22:33:15 -0500 Subject: ControllerEmu: Allow settings to be categorized as "advanced". Make "Virtual Notches" and "Gate Size" categorized as such. --- .../InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp | 3 ++- .../ControllerEmu/ControlGroup/ControlGroup.cpp | 3 ++- .../InputCommon/ControllerEmu/Setting/NumericSetting.h | 14 ++++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) (limited to 'Source/Core/InputCommon/ControllerEmu') diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp index e4d74aa524..539e02b449 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/AnalogStick.cpp @@ -75,7 +75,8 @@ OctagonAnalogStick::OctagonAnalogStick(const char* name_, const char* ui_name_, // i18n: The percent symbol. _trans("%"), // i18n: Refers to plastic shell of game controller (stick gate) that limits stick movements. - _trans("Adjusts target radius of simulated stick gate.")}, + _trans("Adjusts target radius of simulated stick gate."), nullptr, + SettingVisibility::Advanced}, gate_radius * 100, 0.01, 100); } diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp index 2f1eb25d5e..890c43a848 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp @@ -32,7 +32,8 @@ void ControlGroup::AddVirtualNotchSetting(SettingValue* value, double ma AddSetting(value, {_trans("Virtual Notches"), // i18n: The degrees symbol. - _trans("°"), _trans("Snap the thumbstick position to the nearest octagonal axis.")}, + _trans("°"), _trans("Snap the thumbstick position to the nearest octagonal axis."), + nullptr, SettingVisibility::Advanced}, 0, 0, max_virtual_notch_deg); } diff --git a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h index 467e55f039..34321d0ebc 100644 --- a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h +++ b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h @@ -20,13 +20,20 @@ enum class SettingType Bool, }; +enum class SettingVisibility +{ + Normal, + Advanced, +}; + struct NumericSettingDetails { NumericSettingDetails(const char* const _ini_name, const char* const _ui_suffix = nullptr, const char* const _ui_description = nullptr, - const char* const _ui_name = nullptr) + const char* const _ui_name = nullptr, + SettingVisibility _visibility = SettingVisibility::Normal) : ini_name(_ini_name), ui_suffix(_ui_suffix), ui_description(_ui_description), - ui_name(_ui_name ? _ui_name : _ini_name) + ui_name(_ui_name ? _ui_name : _ini_name), visibility(_visibility) { } @@ -41,6 +48,9 @@ struct NumericSettingDetails // The name used in the UI (if different from ini file). const char* const ui_name; + + // Advanced settings should be harder to change in the UI. They might confuse users. + const SettingVisibility visibility; }; class NumericSettingBase -- cgit v1.2.3 From 4c409411edb2957a0f6505aaf6c93e5c6c71f896 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Thu, 19 May 2022 22:47:30 -0500 Subject: DolphinQt: Don't show the advanced input settings on the main dialog. --- Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.cpp | 5 +++++ Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/ControllerEmu') diff --git a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.cpp b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.cpp index 70352ccfd8..f7f2054927 100644 --- a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.cpp +++ b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.cpp @@ -26,6 +26,11 @@ const char* NumericSettingBase::GetUIDescription() const return m_details.ui_description; } +SettingVisibility NumericSettingBase::GetVisibility() const +{ + return m_details.visibility; +} + template <> void NumericSetting::SetExpressionFromValue() { diff --git a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h index 34321d0ebc..8b36ab117e 100644 --- a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h +++ b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h @@ -76,9 +76,12 @@ public: virtual SettingType GetType() const = 0; + virtual void SetToDefault() = 0; + const char* GetUIName() const; const char* GetUISuffix() const; const char* GetUIDescription() const; + SettingVisibility GetVisibility() const; protected: NumericSettingDetails m_details; @@ -102,9 +105,11 @@ public: : NumericSettingBase(details), m_value(*value), m_default_value(default_value), m_min_value(min_value), m_max_value(max_value) { - m_value.SetValue(m_default_value); + SetToDefault(); } + void SetToDefault() override { m_value.SetValue(m_default_value); } + void LoadFromIni(const IniFile::Section& section, const std::string& group_name) override { std::string str_value; -- cgit v1.2.3