Add bt::process helper for nodes without initialization & event processing

This commit is contained in:
Nikita Lisitsa 2022-11-18 12:18:27 +03:00
parent 0a42a015eb
commit c72b19d54e

View file

@ -0,0 +1,47 @@
#pragma once
#include <psemek/bt/node.hpp>
namespace psemek::bt
{
template <typename Tree, typename ProcessFn>
struct process_node;
template <typename Time, typename Event, typename ... Args, typename ProcessFn>
struct process_node<tree<Time, Event, Args...>, ProcessFn>
: node<tree<Time, Event, Args...>>
{
using tree_type = tree<Time, Event, Args...>;
using node_type = node<tree_type>;
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 <typename Tree, typename ProcessFn>
node_ptr<Tree> process(ProcessFn && process_fn)
{
return std::make_unique<process_node<Tree, ProcessFn>>(std::move(process_fn));
}
}