66 lines
1.5 KiB
C++
66 lines
1.5 KiB
C++
#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 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_nav() 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
|