Compare commits

..

No commits in common. "70696db134358642463cc74a004f8816abc76798" and "c05d3aa28fbb82221b8f379e3b5bd327080dd815" have entirely different histories.

13 changed files with 42 additions and 71 deletions

Binary file not shown.

Binary file not shown.

View file

@ -46,31 +46,23 @@ NavigationAgent3D *WretchedState::get_nav() const {
return this->nav; return this->nav;
} }
void WretchedPatrolState::set_patrol_target(Vector3 path_point) {
get_nav()->set_target_position(path_point + get_target()->get_unit_offset_3d());
}
void WretchedPatrolState::enter_state() { void WretchedPatrolState::enter_state() {
this->path = get_target()->get_unit()->get_patrol_path(); this->path = get_target()->get_unit()->get_patrol_path();
float const max_speed{ get_unit()->get_patrol_speed() }; float const max_speed{ get_unit()->get_patrol_speed() };
get_target()->set_movement_speed(max_speed); get_target()->set_movement_speed(max_speed);
get_nav()->set_max_speed(max_speed); get_nav()->set_max_speed(max_speed);
if (this->path) { Vector3 const nav_target{ this->path->get_closest_point(get_target()->get_global_position(), &this->path_point) };
Vector3 const nav_target{ this->path->get_closest_point(get_target()->get_global_position(), &this->path_point) }; get_nav()->set_target_position(nav_target);
set_patrol_target(nav_target);
}
} }
void WretchedPatrolState::process(double delta) { void WretchedPatrolState::process(double delta) {
if (this->path) { if (get_nav()->is_navigation_finished()) {
if (get_nav()->is_navigation_finished()) { this->path_point += 1;
this->path_point += 1; get_nav()->set_target_position(this->path->point_at(this->path_point));
set_patrol_target(this->path->point_at(this->path_point));
}
Vector3 const direction{ get_target()->get_global_position().direction_to(get_nav()->get_next_path_position()) };
get_target()->set_movement_direction(Vector2{ direction.x, direction.z }.normalized());
} }
Vector3 const direction{ get_target()->get_global_position().direction_to(get_nav()->get_next_path_position()) };
get_target()->set_movement_direction(Vector2{ direction.x, direction.z }.normalized());
} }
String WretchedPatrolState::get_next_state() const { String WretchedPatrolState::get_next_state() const {

View file

@ -36,7 +36,6 @@ private:
class WretchedPatrolState : public WretchedState { class WretchedPatrolState : public WretchedState {
GDCLASS(WretchedPatrolState, WretchedState); GDCLASS(WretchedPatrolState, WretchedState);
static void _bind_methods() {} static void _bind_methods() {}
void set_patrol_target(Vector3 path_point);
public: public:
virtual void enter_state() override; virtual void enter_state() override;

View file

@ -59,15 +59,3 @@ void EnemyBody::set_movement_speed(float value) {
float EnemyBody::get_movement_speed() const { float EnemyBody::get_movement_speed() const {
return this->movement_speed; return this->movement_speed;
} }
void EnemyBody::set_unit_offset(Vector2 offset) {
this->unit_offset = offset;
}
Vector2 EnemyBody::get_unit_offset() const {
return this->unit_offset;
}
Vector3 EnemyBody::get_unit_offset_3d() const {
return { this->unit_offset.x, 0, this->unit_offset.y };
}

View file

@ -23,9 +23,6 @@ public:
NavigationAgent3D *get_nav() const; NavigationAgent3D *get_nav() const;
void set_movement_speed(float value); void set_movement_speed(float value);
float get_movement_speed() const; float get_movement_speed() const;
void set_unit_offset(Vector2 offset);
Vector2 get_unit_offset() const;
Vector3 get_unit_offset_3d() const;
private: private:
float movement_speed{ 1.f }; float movement_speed{ 1.f };
@ -34,7 +31,6 @@ private:
StateMachine *fsm{ nullptr }; StateMachine *fsm{ nullptr };
NpcUnit *unit{ nullptr }; NpcUnit *unit{ nullptr };
NavigationAgent3D *nav{ nullptr }; NavigationAgent3D *nav{ nullptr };
Vector2 unit_offset{ 0, 0 };
}; };
#endif // !ENEMY_BODY_H #endif // !ENEMY_BODY_H

View file

@ -18,11 +18,8 @@ void NpcUnit::child_added(Node *node) {
if (EnemyBody * npc{ cast_to<EnemyBody>(node) }) { if (EnemyBody * npc{ cast_to<EnemyBody>(node) }) {
this->npcs.push_back(npc); this->npcs.push_back(npc);
npc->set_unit(this); npc->set_unit(this);
Vector3 const offset{ npc->get_global_position() - get_global_position() }; PlayerDetector *detector{ cast_to<PlayerDetector>(npc->get_node(NodePath("%PlayerDetector"))) };
npc->set_unit_offset({ offset.x, offset.z }); detector->connect(PlayerDetector::sig_awareness_changed, callable_mp(this, &self_type::on_npc_awareness_changed));
if (PlayerDetector * detector{ cast_to<PlayerDetector>(npc->get_node(NodePath("%PlayerDetector"))) }) {
detector->connect(PlayerDetector::sig_awareness_changed, callable_mp(this, &self_type::on_npc_awareness_changed));
}
} }
} }

View file

@ -1,13 +1,13 @@
#ifndef NPC_UNIT_H #ifndef NPC_UNIT_H
#define NPC_UNIT_H #define NPC_UNIT_H
#include "scene/3d/node_3d.h" #include "scene/main/node.h"
class StateMachine; class StateMachine;
class EnemyBody; class EnemyBody;
class PatrolPath; class PatrolPath;
class NpcUnit : public Node3D { class NpcUnit : public Node {
GDCLASS(NpcUnit, Node3D); GDCLASS(NpcUnit, Node);
static void _bind_methods(); static void _bind_methods();
void on_npc_awareness_changed(bool seen); void on_npc_awareness_changed(bool seen);
void child_added(Node *node); void child_added(Node *node);

View file

@ -56,4 +56,8 @@ void StateMachine::add_state(State *state) {
if (this->current_state == nullptr) { if (this->current_state == nullptr) {
this->switch_to_state(state); this->switch_to_state(state);
} }
print_line("states:");
for (KeyValue<StringName, State *> kv : this->states) {
print_line(vformat("\t\t| %s %s", kv.key, kv.value));
}
} }

File diff suppressed because one or more lines are too long

View file

@ -18,6 +18,7 @@ unique_name_in_owner = true
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."] [node name="NavigationAgent3D" type="NavigationAgent3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
path_desired_distance = 0.25 path_desired_distance = 0.25
debug_enabled = true
[node name="PlayerDetector" type="PlayerDetector" parent="."] [node name="PlayerDetector" type="PlayerDetector" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View file

@ -1,17 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://5hg5eirw7v8n"]
[ext_resource type="PackedScene" uid="uid://dqlqgk1veyos8" path="res://objects/enemies/enemy_wretched.tscn" id="1_l77gx"]
[node name="NpcUnit" type="NpcUnit"]
[node name="EnemyWretched" parent="." instance=ExtResource("1_l77gx")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -0.9145346, 0.023195954, -0.63123465)
[node name="EnemyWretched2" parent="." instance=ExtResource("1_l77gx")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 1.0534863, 0.023196908, -0.6773462)
[node name="EnemyWretched3" parent="." instance=ExtResource("1_l77gx")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -0.5066114, 0.023196908, 0.93247986)
[node name="EnemyWretched4" parent="." instance=ExtResource("1_l77gx")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 1.3384295, 0.023197861, 0.74458694)