diff --git a/libs/bt/include/psemek/bt/process.hpp b/libs/bt/include/psemek/bt/process.hpp new file mode 100644 index 00000000..cdf0cf5d --- /dev/null +++ b/libs/bt/include/psemek/bt/process.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +namespace psemek::bt +{ + + template + struct process_node; + + template + struct process_node, ProcessFn> + : node> + { + using tree_type = tree; + using node_type = node; + using typename node_type::finished; + using typename node_type::status; + + process_node(ProcessFn && process_fn) + : process_fn_(std::move(process_fn)) + {} + + void start(Args ...) override + {} + + status update(Time dt, Args ... args) override + { + return process_fn_(dt, args...); + } + + bool event(Event const &, Args ...) override + { + return false; + } + + private: + ProcessFn process_fn_; + }; + + template + node_ptr process(ProcessFn && process_fn) + { + return std::make_unique>(std::move(process_fn)); + } + +}