diff --git a/modules/wave_survival/enemies/enemy_rifleman.cpp b/modules/wave_survival/enemies/enemy_rifleman.cpp new file mode 100644 index 00000000..8b90f545 --- /dev/null +++ b/modules/wave_survival/enemies/enemy_rifleman.cpp @@ -0,0 +1,26 @@ +#include "enemy_rifleman.h" + +void EnemyRifleman::_bind_methods() { +} + +void EnemyRifleman::on_child_entered() { +} + +void EnemyRifleman::ready() { +} + +void EnemyRifleman::_notification(int what) { + if (Engine::get_singleton()->is_editor_hint()) { + return; + } + switch (what) { + default: + return; + case NOTIFICATION_ENTER_TREE: + enter_tree(); + return; + case NOTIFICATION_READY: + ready(); + return; + } +} diff --git a/modules/wave_survival/enemies/enemy_rifleman.h b/modules/wave_survival/enemies/enemy_rifleman.h index 4cc400f4..cbc49b41 100644 --- a/modules/wave_survival/enemies/enemy_rifleman.h +++ b/modules/wave_survival/enemies/enemy_rifleman.h @@ -2,10 +2,55 @@ #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