44 lines
733 B
C++
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>>;
|
|
|
|
}
|