From a734eb8b20cf7ecc33c11e7bfd155ee937095167 Mon Sep 17 00:00:00 2001 From: Sara Date: Mon, 21 Jul 2025 23:17:46 +0200 Subject: [PATCH] feat: exposed health status getter on player --- modules/wave_survival/player_body.cpp | 33 +++++++++++++++------------ modules/wave_survival/player_body.h | 7 +++--- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/modules/wave_survival/player_body.cpp b/modules/wave_survival/player_body.cpp index 5a69933e..c9a97e00 100644 --- a/modules/wave_survival/player_body.cpp +++ b/modules/wave_survival/player_body.cpp @@ -1,4 +1,5 @@ #include "player_body.h" +#include "health_status.h" #include "macros.h" #include "player_input.h" #include "weapon_base.h" @@ -9,16 +10,19 @@ PlayerBody *PlayerBody::singleton_instance{ nullptr }; void PlayerBody::_bind_methods() { } -void PlayerBody::ready() { - PlayerInput *input{ cast_to(get_node(NodePath("%PlayerInput"))) }; - input->connect(PlayerInput::sig_movement_input, callable_mp(this, &self_type::set_movement_input)); - input->connect(PlayerInput::sig_look_input, callable_mp(this, &self_type::on_look_input)); - input->connect(PlayerInput::sig_jump, callable_mp(this, &self_type::on_jump_input)); - input->connect(PlayerInput::sig_run, callable_mp(this, &self_type::on_run_input)); - this->weapons = cast_to(get_node(NodePath("%WeaponInventory"))); -} - -void PlayerBody::process(double delta) { +void PlayerBody::on_child_entered(Node *node) { + if (PlayerInput * input{ cast_to(node) }) { + input->connect(PlayerInput::sig_movement_input, callable_mp(this, &self_type::set_movement_input)); + input->connect(PlayerInput::sig_look_input, callable_mp(this, &self_type::on_look_input)); + input->connect(PlayerInput::sig_jump, callable_mp(this, &self_type::on_jump_input)); + input->connect(PlayerInput::sig_run, callable_mp(this, &self_type::on_run_input)); + } + if (WeaponInventory * inventory{ cast_to(node) }) { + this->weapons = inventory; + } + if (HealthStatus * health{ cast_to(node) }) { + this->health = health; + } } void PlayerBody::physics_process(double delta) { @@ -65,6 +69,7 @@ void PlayerBody::_notification(int what) { return; case NOTIFICATION_ENTER_TREE: singleton_instance = this; + connect("child_entered_tree", callable_mp(this, &self_type::on_child_entered)); return; case NOTIFICATION_EXIT_TREE: singleton_instance = nullptr; @@ -72,10 +77,6 @@ void PlayerBody::_notification(int what) { case NOTIFICATION_READY: set_process(true); set_physics_process(true); - ready(); - return; - case NOTIFICATION_PROCESS: - process(get_process_delta_time()); return; case NOTIFICATION_PHYSICS_PROCESS: physics_process(get_physics_process_delta_time()); @@ -94,3 +95,7 @@ bool PlayerBody::get_is_running() const { bool PlayerBody::get_wants_to_run() const { return this->try_running && this->movement_input.y > 0.f && this->is_on_floor(); } + +HealthStatus *PlayerBody::get_health() const { + return this->health; +} diff --git a/modules/wave_survival/player_body.h b/modules/wave_survival/player_body.h index 3afd9c3b..ad528664 100644 --- a/modules/wave_survival/player_body.h +++ b/modules/wave_survival/player_body.h @@ -3,15 +3,14 @@ #include "scene/3d/physics/character_body_3d.h" class WeaponInventory; +class HealthStatus; class PlayerBody : public CharacterBody3D { GDCLASS(PlayerBody, CharacterBody3D); static void _bind_methods(); static PlayerBody *singleton_instance; -private: - void ready(); - void process(double delta); + void on_child_entered(Node *node); void physics_process(double delta); void set_movement_input(Vector2 state); @@ -26,6 +25,7 @@ public: static PlayerBody *get_singleton(); bool get_is_running() const; bool get_wants_to_run() const; + HealthStatus *get_health() const; private: bool try_running{ false }; @@ -36,6 +36,7 @@ private: Vector2 movement_input{}; WeaponInventory *weapons; + HealthStatus *health{ nullptr }; }; #endif // !PLAYER_BODY_H