diff --git a/libs/util/include/psemek/util/behavior_tree.hpp b/libs/util/include/psemek/util/behavior_tree.hpp index 3a8eaef4..1b881902 100644 --- a/libs/util/include/psemek/util/behavior_tree.hpp +++ b/libs/util/include/psemek/util/behavior_tree.hpp @@ -565,13 +565,17 @@ namespace psemek::util struct retry { Child child; + std::optional max_count; + int count; - retry(Child child) + retry(Child child, std::optional max_count = std::nullopt) : child(std::move(child)) + , max_count(max_count) {} void start(Args ... args) { + count = 0; child.start(args...); } @@ -584,7 +588,10 @@ namespace psemek::util return finished{true}; else { - start(args...); + ++count; + if (max_count && count == *max_count) + return finished{false}; + child.start(args...); return running{}; } }