#ifndef ENEMY_WRETCHED_H #define ENEMY_WRETCHED_H #include "wave_survival/enemy_body.h" #include "wave_survival/state.h" class PatrolPath; class NpcUnit; class EnemyWretched : public EnemyBody { GDCLASS(EnemyWretched, EnemyBody); static void _bind_methods(); void ready(); protected: void _notification(int what); }; /* ============================== STATES ============================== */ class WretchedState : public State { GDCLASS(WretchedState, State); static void _bind_methods() {} public: virtual void set_target(Node *node) override; EnemyWretched *get_target() const; NpcUnit *get_unit() const; NavigationAgent3D *get_nav() const; private: NpcUnit *unit{ nullptr }; EnemyWretched *target{ nullptr }; NavigationAgent3D *nav{ nullptr }; }; class WretchedPatrolState : public WretchedState { GDCLASS(WretchedPatrolState, WretchedState); static void _bind_methods() {} void set_patrol_target(Vector3 path_point); public: virtual void enter_state() override; virtual void process(double delta) override; virtual String get_next_state() const override; private: int path_point{ 0 }; PatrolPath *path{ nullptr }; }; class WretchedChaseState : public WretchedState { GDCLASS(WretchedChaseState, WretchedState); static void _bind_methods() {} public: virtual void enter_state() override; virtual void process(double delta) override; virtual String get_next_state() const override; }; class WretchedAttackState : public WretchedState { GDCLASS(WretchedAttackState, WretchedState); static void _bind_methods() {} public: virtual String get_next_state() const override; }; #endif // !ENEMY_WRETCHED_H