diff --git a/engine/demo/example/scenario.xosc b/engine/demo/example/scenario.xosc index 48bbcc41bdb772434021770a22cda917adc07d34..15c64813653fb5349aec0b50d8c387e433e3a409 100644 --- a/engine/demo/example/scenario.xosc +++ b/engine/demo/example/scenario.xosc @@ -120,7 +120,7 @@ </Action> <StartTrigger> <ConditionGroup> - <Condition name="NotAtStart" delay="0" conditionEdge="rising"> + <Condition name="NotAtStart" delay="0" conditionEdge="none"> <ByValueCondition> <SimulationTimeCondition value="0" rule="greaterThan" /> </ByValueCondition> @@ -148,9 +148,9 @@ </ManeuverGroup> <StartTrigger> <ConditionGroup> - <Condition name="EndTime" delay="0" conditionEdge="rising"> + <Condition name="FromStart" delay="0" conditionEdge="rising"> <ByValueCondition> - <SimulationTimeCondition value="5.0" rule="greaterThan"/> + <SimulationTimeCondition value="0.0" rule="greaterOrEqual" /> </ByValueCondition> </Condition> </ConditionGroup> diff --git a/engine/src/Node/TriggerableCompositeNode.h b/engine/src/Node/TriggerableCompositeNode.h index e712758a0dbf242dee068eadf5451ca7bc8c1dd1..a3a2491a1531450bb17fa262f3e4b1c06a853a03 100644 --- a/engine/src/Node/TriggerableCompositeNode.h +++ b/engine/src/Node/TriggerableCompositeNode.h @@ -209,14 +209,14 @@ private: ///@brief tick as if no stop trigger would decorate the start trigger void tickWithStartTrigger() { - if (start_trigger_node_) + if (start_trigger_node_ && start_trigger_status != NodeStatus::kSuccess) { - const auto status = start_trigger_node_->executeTick(); - if (status == NodeStatus::kRunning) + start_trigger_status = start_trigger_node_->executeTick(); + if (start_trigger_status == NodeStatus::kRunning) { return; } - if (status == NodeStatus::kFailure) + if (start_trigger_status == NodeStatus::kFailure) { throw std::runtime_error("StartTrigger reported failure"); } @@ -249,6 +249,7 @@ private: return NodeStatus::kRunning; } + NodeStatus start_trigger_status{NodeStatus::kIdle}; TransientNode::Ptr stop_trigger_node_{nullptr}; TransientNode::Ptr start_trigger_node_{nullptr}; TransientNode::Ptr m_child_node{nullptr};