#ifndef ENEMY_RIFLEMAN_H #define ENEMY_RIFLEMAN_H #include "wave_survival/enemy_body.h" #include "wave_survival/state.h" #include "wave_survival/state_machine.h" class AnimationPlayer; class NavigationAgent3D; class EnemyRifleman : public EnemyBody { GDCLASS(EnemyRifleman, EnemyBody); static void _bind_methods(); void on_child_entered(Node *node); void ready(); protected: void _notification(int what); public: void set_chase_speed(float speed); float get_chase_speed() const; AnimationPlayer *get_anim() const; private: float chase_speed{ 5.f }; StateMachine *fsm{ nullptr }; AnimationPlayer *anim{ nullptr }; }; /* ============================== STATES ============================== */ class RiflemanState : public EnemyState { GDCLASS(RiflemanState, State); static void _bind_methods() {} public: EnemyRifleman *get_target() const; }; class RiflemanPatrolState : public EnemyPatrolState { GDCLASS(RiflemanPatrolState, EnemyPatrolState); static void _bind_methods() {} public: String get_next_state() const override; }; class RiflemanChaseState : public EnemyChaseState { GDCLASS(RiflemanChaseState, EnemyChaseState); static void _bind_methods() {} public: String get_next_state() const override; }; class RiflemanFireState : public RiflemanState { GDCLASS(RiflemanFireState, RiflemanState); static void _bind_methods() {} }; #endif // !ENEMY_RIFLEMAN_H