#ifndef ENEMY_RIFLEMAN_H #define ENEMY_RIFLEMAN_H #include "wave_survival/enemy_body.h" #include "wave_survival/state.h" class AnimationPlayer; class NavigationAgent3D; class EnemyRifleman : public EnemyBody { GDCLASS(EnemyRifleman, EnemyBody); static void _bind_methods(); void on_child_entered(); void enter_tree(); void ready(); protected: void _notification(int what); }; /* ============================== STATES ============================== */ class RiflemanState : public State { GDCLASS(RiflemanState, State); static void _bind_methods(); public: virtual void set_target(Node *target) override; EnemyRifleman *get_target() const; NpcUnit *get_unit() const; NavigationAgent3D *get_agent() const; AnimationPlayer *get_anim() const; private: EnemyRifleman *target{ nullptr }; }; class RiflemanPatrolState : public RiflemanState { GDCLASS(RiflemanPatrolState, RiflemanState); static void _bind_methods(); public: virtual void enter_state() override; virtual void process(double delta) override; }; class RiflemanSeekState : public RiflemanState { GDCLASS(RiflemanSeekState, RiflemanState); static void _bind_methods(); }; class RiflemanFireState : public RiflemanState { GDCLASS(RiflemanFireState, RiflemanState); static void _bind_methods(); }; #endif // !ENEMY_RIFLEMAN_H