70 lines
1.6 KiB
C++
70 lines
1.6 KiB
C++
#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
|