summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2019-01-26 13:18:20 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2019-10-11 18:12:17 -0500
commit6a2096c41977d6c33c2ca20494d9f623bed221ff (patch)
treee8b66982fb05259ba98a8ff39a7bd4be0b638a2b /Source/Core/InputCommon/ControlReference
parentfd07ae8cec5c77ac60788350610739e6ac094547 (diff)
ExpressionParser: Add optional 2nd argument to toggle function which clears state.
Diffstat (limited to 'Source/Core/InputCommon/ControlReference')
-rw-r--r--Source/Core/InputCommon/ControlReference/FunctionExpression.cpp13
-rw-r--r--Source/Core/InputCommon/ControlReference/FunctionExpression.h1
2 files changed, 13 insertions, 1 deletions
diff --git a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
index 15a66ec9d1..84f3ac907e 100644
--- a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
+++ b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
@@ -32,7 +32,8 @@ class ToggleExpression : public FunctionExpression
private:
virtual bool ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) override
{
- return 1 == args.size();
+ // Optional 2nd argument for clearing state:
+ return 1 == args.size() || 2 == args.size();
}
ControlState GetValue() const override
@@ -49,6 +50,11 @@ private:
m_state ^= true;
}
+ if (2 == GetArgCount() && GetArg(1).GetValue() > CONDITION_THRESHOLD)
+ {
+ m_state = false;
+ }
+
return m_state;
}
@@ -257,5 +263,10 @@ const Expression& FunctionExpression::GetArg(u32 number) const
return *m_args[number];
}
+u32 FunctionExpression::GetArgCount() const
+{
+ return u32(m_args.size());
+}
+
} // namespace ExpressionParser
} // namespace ciface
diff --git a/Source/Core/InputCommon/ControlReference/FunctionExpression.h b/Source/Core/InputCommon/ControlReference/FunctionExpression.h
index 8ac7e9800c..35e000a16f 100644
--- a/Source/Core/InputCommon/ControlReference/FunctionExpression.h
+++ b/Source/Core/InputCommon/ControlReference/FunctionExpression.h
@@ -30,6 +30,7 @@ protected:
Expression& GetArg(u32 number);
const Expression& GetArg(u32 number) const;
+ u32 GetArgCount() const;
private:
std::vector<std::unique_ptr<Expression>> m_args;