summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2019-01-10 19:04:27 -0500
committerGitHub <noreply@github.com>2019-01-10 19:04:27 -0500
commit012338288e30e765e2ef8ec284cdbaceb42ba5ea (patch)
tree2874ac5d304b6e881673cc7b5e256bc85d1df4d4 /Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp
parentc2afcb0f6bba761c248031ee715a1db3fd4dbe05 (diff)
parent7efa96eda979f5e717813e7c76cefb0720bc239a (diff)
Merge pull request #7662 from jordan-woyak/mapping-indicators-make-pretty
ControllerEmu: Make mapping indicators pretty
Diffstat (limited to 'Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp51
1 files changed, 41 insertions, 10 deletions
diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp
index 8f26fde6fc..6ae4dfd668 100644
--- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp
+++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/MixedTriggers.cpp
@@ -4,6 +4,7 @@
#include "InputCommon/ControllerEmu/ControlGroup/MixedTriggers.h"
+#include <algorithm>
#include <cstddef>
#include <memory>
#include <string>
@@ -21,23 +22,53 @@ MixedTriggers::MixedTriggers(const std::string& name_)
: ControlGroup(name_, GroupType::MixedTriggers)
{
numeric_settings.emplace_back(std::make_unique<NumericSetting>(_trans("Threshold"), 0.9));
+ numeric_settings.emplace_back(std::make_unique<NumericSetting>(_trans("Dead Zone"), 0.0, 0, 25));
}
-void MixedTriggers::GetState(u16* const digital, const u16* bitmasks, ControlState* analog)
+void MixedTriggers::GetState(u16* const digital, const u16* bitmasks, ControlState* analog,
+ bool adjusted) const
{
- const size_t trigger_count = controls.size() / 2;
+ const ControlState threshold = numeric_settings[SETTING_THRESHOLD]->GetValue();
+ ControlState deadzone = numeric_settings[SETTING_DEADZONE]->GetValue();
- for (size_t i = 0; i < trigger_count; ++i, ++bitmasks, ++analog)
+ // Return raw values. (used in UI)
+ if (!adjusted)
{
- if (controls[i]->control_ref->State() > numeric_settings[0]->GetValue()) // threshold
- {
- *analog = 1.0;
- *digital |= *bitmasks;
- }
- else
+ deadzone = 0.0;
+ }
+
+ const int trigger_count = int(controls.size() / 2);
+ for (int i = 0; i != trigger_count; ++i)
+ {
+ ControlState button_value = controls[i]->control_ref->State();
+ ControlState analog_value = controls[trigger_count + i]->control_ref->State();
+
+ // Apply deadzone:
+ analog_value = std::max(0.0, analog_value - deadzone) / (1.0 - deadzone);
+ button_value = std::max(0.0, button_value - deadzone) / (1.0 - deadzone);
+
+ // Apply threshold:
+ if (button_value > threshold)
{
- *analog = controls[i + trigger_count]->control_ref->State();
+ // Fully activate analog:
+ analog_value = 1.0;
+
+ // Activate button:
+ *digital |= bitmasks[i];
}
+
+ analog[i] = analog_value;
}
}
+
+ControlState MixedTriggers::GetDeadzone() const
+{
+ return numeric_settings[SETTING_DEADZONE]->GetValue();
+}
+
+ControlState MixedTriggers::GetThreshold() const
+{
+ return numeric_settings[SETTING_THRESHOLD]->GetValue();
+}
+
} // namespace ControllerEmu