diff --git a/libs/bt/include/psemek/bt/conditional.hpp b/libs/bt/include/psemek/bt/conditional.hpp index fa2b8b8b..3e4c5b23 100644 --- a/libs/bt/include/psemek/bt/conditional.hpp +++ b/libs/bt/include/psemek/bt/conditional.hpp @@ -35,24 +35,35 @@ namespace psemek::bt status update(Time dt, Args ... args) override { - if (condition_result_) + try { - if (*condition_result_) - return true_branch_->update(dt, args...); - else - return false_branch_->update(dt, args...); - } - else - { - auto result = condition_->update(dt, args...); - - if (auto finished = std::get_if(&result)) + if (condition_result_) { - condition_result_ = finished->result; - return running{}; + if (*condition_result_) + return true_branch_->update(dt, args...); + else + return false_branch_->update(dt, args...); } + else + { + auto result = condition_->update(dt, args...); - return result; + if (auto finished = std::get_if(&result)) + { + condition_result_ = finished->result; + if (*condition_result_) + true_branch_->start(args...); + else + false_branch_->start(args...); + return running{}; + } + + return result; + } + } + catch (assertion_failed_exception const &) + { + return finished{false}; } }