From e8152b700f76da97d346b93662ef8492bc93190c Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Fri, 18 Oct 2019 14:54:02 -0500 Subject: InputCommon: Allow controller settings specified with input expresions. --- Source/Core/InputCommon/ControllerEmu/ControlGroup/Buttons.h | 4 +--- .../ControllerEmu/ControlGroup/ModifySettingsButton.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) (limited to 'Source/Core/InputCommon/ControllerEmu/ControlGroup') diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Buttons.h b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Buttons.h index c2311415e5..9560a37843 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Buttons.h +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Buttons.h @@ -24,13 +24,11 @@ public: { for (auto& control : controls) { - if (control->control_ref->State() > ACTIVATION_THRESHOLD) + if (control->control_ref->GetState()) *buttons |= *bitmasks; bitmasks++; } } - - static constexpr ControlState ACTIVATION_THRESHOLD = 0.5; }; } // namespace ControllerEmu diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp index 908de81a96..a902034795 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ModifySettingsButton.cpp @@ -35,19 +35,19 @@ void ModifySettingsButton::GetState() { for (size_t i = 0; i < controls.size(); ++i) { - ControlState state = controls[i]->control_ref->State(); + const bool state = controls[i]->control_ref->GetState(); if (!associated_settings_toggle[i]) { // not toggled - associated_settings[i] = state > ACTIVATION_THRESHOLD; + associated_settings[i] = state; } else { // toggle (loading savestates does not en-/disable toggle) // after we passed the threshold, we en-/disable. but after that, we don't change it // anymore - if (!threshold_exceeded[i] && state > ACTIVATION_THRESHOLD) + if (!threshold_exceeded[i] && state) { associated_settings[i] = !associated_settings[i]; @@ -59,7 +59,7 @@ void ModifySettingsButton::GetState() threshold_exceeded[i] = true; } - if (state < ACTIVATION_THRESHOLD) + if (!state) threshold_exceeded[i] = false; } } -- cgit v1.2.3 From 0a1634bedf17f7b27a3781d8e5ac6bafb20cd546 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sat, 18 Jan 2020 11:19:32 -0600 Subject: InputCommon: Allow Wii remote extension to be set with an input expression. --- .../ControllerEmu/ControlGroup/Attachments.cpp | 14 ++++++++++++-- .../ControllerEmu/ControlGroup/Attachments.h | 8 ++++++-- .../ControllerEmu/ControlGroup/ControlGroup.cpp | 22 +++++++++++++++++----- 3 files changed, 35 insertions(+), 9 deletions(-) (limited to 'Source/Core/InputCommon/ControllerEmu/ControlGroup') diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.cpp index e104918fe2..6f980d8c60 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.cpp @@ -17,12 +17,22 @@ void Attachments::AddAttachment(std::unique_ptr att) u32 Attachments::GetSelectedAttachment() const { - return m_selected_attachment; + const u32 value = m_selection_value.GetValue(); + + if (value < m_attachments.size()) + return value; + + return 0; } void Attachments::SetSelectedAttachment(u32 val) { - m_selected_attachment = val; + m_selection_setting.SetValue(val); +} + +NumericSetting& Attachments::GetSelectionSetting() +{ + return m_selection_setting; } const std::vector>& Attachments::GetAttachmentList() const diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.h b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.h index 81e76eccfe..f92bd8b1fd 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.h +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Attachments.h @@ -12,6 +12,7 @@ #include "Common/CommonTypes.h" #include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h" #include "InputCommon/ControllerEmu/ControllerEmu.h" +#include "InputCommon/ControllerEmu/Setting/NumericSetting.h" namespace ControllerEmu { @@ -27,11 +28,14 @@ public: u32 GetSelectedAttachment() const; void SetSelectedAttachment(u32 val); + NumericSetting& GetSelectionSetting(); + const std::vector>& GetAttachmentList() const; private: - std::vector> m_attachments; + SettingValue m_selection_value; + NumericSetting m_selection_setting = {&m_selection_value, {""}, 0, 0, 0}; - std::atomic m_selected_attachment = {}; + std::vector> m_attachments; }; } // namespace ControllerEmu diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp index 40ccae24f7..1a262a8dfd 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp @@ -74,15 +74,19 @@ void ControlGroup::LoadConfig(IniFile::Section* sec, const std::string& defdev, ext->SetSelectedAttachment(0); u32 n = 0; - std::string extname; - sec->Get(base + name, &extname, ""); + std::string attachment_text; + sec->Get(base + name, &attachment_text, ""); + + // First assume attachment string is a valid expression. + // If it instead matches one of the names of our attachments it is overridden below. + ext->GetSelectionSetting().GetInputReference().SetExpression(attachment_text); for (auto& ai : ext->GetAttachmentList()) { ai->SetDefaultDevice(defdev); ai->LoadConfig(sec, base + ai->GetName() + "/"); - if (ai->GetName() == extname) + if (ai->GetName() == attachment_text) ext->SetSelectedAttachment(n); n++; @@ -114,8 +118,16 @@ void ControlGroup::SaveConfig(IniFile::Section* sec, const std::string& defdev, if (type == GroupType::Attachments) { auto* const ext = static_cast(this); - sec->Set(base + name, ext->GetAttachmentList()[ext->GetSelectedAttachment()]->GetName(), - "None"); + + if (ext->GetSelectionSetting().IsSimpleValue()) + { + sec->Set(base + name, ext->GetAttachmentList()[ext->GetSelectedAttachment()]->GetName(), + "None"); + } + else + { + sec->Set(base + name, ext->GetSelectionSetting().GetInputReference().GetExpression(), "None"); + } for (auto& ai : ext->GetAttachmentList()) ai->SaveConfig(sec, base + ai->GetName() + "/"); -- cgit v1.2.3