psemek/libs/bt/include/psemek/bt/node.hpp

44 lines
733 B
C++

#pragma once
#include <psemek/bt/tree.hpp>
#include <variant>
#include <memory>
namespace psemek::bt
{
template <typename Tree>
struct node;
template <typename Time, typename Event, typename ... Args>
struct node<tree<Time, Event, Args...>>
{
using tree_type = tree<Time, Event, Args...>;
struct running
{};
struct finished
{
bool result;
};
struct suspended
{
Time duration;
};
using status = std::variant<running, finished, suspended>;
virtual void start(Args ...) {}
virtual status update(Time dt, Args ... args) = 0;
virtual bool event(Event const &, Args ...) { return false; }
virtual ~node() {}
};
template <typename Tree>
using node_ptr = std::unique_ptr<node<Tree>>;
}