mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-09 00:02:21 +02:00
Add support for NOT conditional in the route json
This commit is contained in:
parent
710b51fe14
commit
00be6b3e3a
2 changed files with 26 additions and 1 deletions
|
@ -825,12 +825,29 @@ Conditional::Pointer UserInputMapper::parseConditional(const QJsonValue& value)
|
|||
return std::make_shared<AndConditional>(children);
|
||||
} else if (value.isString()) {
|
||||
// Support "when" : "GamePad.RB"
|
||||
auto input = findDeviceInput(value.toString());
|
||||
auto conditionalToken = value.toString();
|
||||
|
||||
// Detect for modifier case (Not...)
|
||||
QString conditionalModifier;
|
||||
const QString JSON_CONDITIONAL_MODIFIER_NOT("!");
|
||||
if (conditionalToken.startsWith(JSON_CONDITIONAL_MODIFIER_NOT)) {
|
||||
conditionalModifier = JSON_CONDITIONAL_MODIFIER_NOT;
|
||||
conditionalToken = conditionalToken.right(conditionalToken.size() - conditionalModifier.size());
|
||||
}
|
||||
|
||||
auto input = findDeviceInput(conditionalToken);
|
||||
auto endpoint = endpointFor(input);
|
||||
if (!endpoint) {
|
||||
return Conditional::Pointer();
|
||||
}
|
||||
|
||||
if (!conditionalModifier.isEmpty()) {
|
||||
if (conditionalModifier == JSON_CONDITIONAL_MODIFIER_NOT) {
|
||||
return std::make_shared<NotEndpointConditional>(endpoint);
|
||||
}
|
||||
}
|
||||
|
||||
// Default and conditional behavior
|
||||
return std::make_shared<EndpointConditional>(endpoint);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,5 +23,13 @@ private:
|
|||
Endpoint::Pointer _endpoint;
|
||||
};
|
||||
|
||||
class NotEndpointConditional : public Conditional {
|
||||
public:
|
||||
NotEndpointConditional(Endpoint::Pointer endpoint) : _endpoint(endpoint) {}
|
||||
virtual bool satisfied() override { return _endpoint && _endpoint->value() == 0.0; }
|
||||
private:
|
||||
Endpoint::Pointer _endpoint;
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue