diff --git a/modules/viscosity/player_behaviour_tree.cpp b/modules/viscosity/player_behaviour_tree.cpp index ec20a3ee..4e2fb3c9 100644 --- a/modules/viscosity/player_behaviour_tree.cpp +++ b/modules/viscosity/player_behaviour_tree.cpp @@ -14,6 +14,7 @@ void PlayerBehaviourTree::_bind_methods() { BIND_HPROPERTY(Variant::OBJECT, hang_ray, PROPERTY_HINT_NODE_TYPE, "RayCast3D", PROPERTY_USAGE_READ_ONLY); BIND_HPROPERTY(Variant::OBJECT, ground_ray, PROPERTY_HINT_NODE_TYPE, "RayCast3D", PROPERTY_USAGE_READ_ONLY); ClassDB::bind_method(D_METHOD("get_world_move_input"), &self_type::get_world_move_input); + ClassDB::bind_method(D_METHOD("get_ground_distance"), &self_type::get_ground_distance); } void PlayerBehaviourTree::_notification(int what) { @@ -60,3 +61,9 @@ Vector3 PlayerBehaviourTree::get_world_move_input() const { forward.normalized() * this->move_input.y }; } + +float PlayerBehaviourTree::get_ground_distance() const { + return (this->ground_ray->is_colliding() + ? this->ground_ray->get_collision_point().distance_to(this->ground_ray->get_global_position()) + : Math::INF); +} diff --git a/modules/viscosity/player_behaviour_tree.h b/modules/viscosity/player_behaviour_tree.h index ffccbb3a..89c7f1dc 100644 --- a/modules/viscosity/player_behaviour_tree.h +++ b/modules/viscosity/player_behaviour_tree.h @@ -34,4 +34,5 @@ public: GET_SET_FNS(Node3D *, character); GET_SET_FNS(AnimationTree *, anim); GET_SET_FNS(RayCast3D *, hang_ray); + float get_ground_distance() const; };