#ifndef RTS_STATES_HPP
#define RTS_STATES_HPP

#include "goap/state.hpp"
#include <godot_cpp/classes/navigation_agent3d.hpp>

/*! Uses navigation to chase the desired target node.
 */
class MoveTo : public goap::State {
    GDCLASS(MoveTo, goap::State);
    static void _bind_methods();
public:
    virtual void _ready() override;
    virtual void _end_state() override;
    virtual void _process(double delta_time) override;
public:
    gd::Node3D *target_node{nullptr};
private:
    gd::Node3D *parent_node3d{nullptr};
    gd::NavigationAgent3D *agent{nullptr};
};

class Activate : public goap::State {
    GDCLASS(Activate, goap::State);
    static void _bind_methods();
public:
    gd::Node3D *target_node{nullptr};
    gd::String animation{};
};

class Animate : public goap::State {
    GDCLASS(Animate, goap::State);
    static void _bind_methods();
public:
    gd::String animation{};
};

#endif // !RTS_STATES_HPP
