summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2021-03-21 20:27:00 +0100
committerJosJuice <josjuice@gmail.com>2022-10-03 22:00:21 +0200
commitcb16d20f2d4ed1ebf150b6ba4d64fe469c1263f1 (patch)
tree4cf6bf751dd1cdea3d199f5885571598325d44d7 /Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp
parentcb6d476538afe85c25d30e8679b6f15abe5d1760 (diff)
ControllerEmu: Add new "input override" system
Diffstat (limited to 'Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp
index 043ef37356..7359a4e66d 100644
--- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp
+++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp
@@ -82,15 +82,28 @@ ControlState Cursor::GetGateRadiusAtAngle(double ang) const
Cursor::StateData Cursor::GetState(const bool adjusted)
{
- if (!adjusted)
- {
- const auto raw_input = GetReshapableState(false);
+ const ReshapeData input = GetReshapableState(adjusted);
+ const StateData state = adjusted ? UpdateState(input) : StateData{input.x, input.y};
+ return state;
+}
- return {raw_input.x, raw_input.y};
- }
+Cursor::StateData Cursor::GetState(const bool adjusted,
+ const ControllerEmu::InputOverrideFunction& override_func)
+{
+ StateData state = GetState(adjusted);
+ if (!override_func)
+ return state;
+
+ if (const std::optional<ControlState> x_override = override_func(name, X_INPUT_OVERRIDE, state.x))
+ state.x = *x_override;
+ if (const std::optional<ControlState> y_override = override_func(name, Y_INPUT_OVERRIDE, state.y))
+ state.y = *y_override;
- const auto input = GetReshapableState(true);
+ return state;
+}
+Cursor::StateData Cursor::UpdateState(Cursor::ReshapeData input)
+{
// TODO: Using system time is ugly.
// Kill this after state is moved into wiimote rather than this class.
const auto now = Clock::now();