diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2022-05-16 13:47:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-16 13:47:28 +0200 |
commit | f95b7412c74518a1f34912ba7d129cf247e7c2c1 (patch) | |
tree | def14ec4dea271e3266fcfd8d50c080abf609f8b /scene/2d | |
parent | 9ba0fac1ba090946afcdbcee5fb0107a4c688e59 (diff) | |
parent | cc707412e909f117ad53ebe53e19bad43acf086a (diff) |
Merge pull request #61057 from smix8/navigation_obstacle_transform_error_4.x
Diffstat (limited to 'scene/2d')
-rw-r--r-- | scene/2d/navigation_obstacle_2d.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/scene/2d/navigation_obstacle_2d.cpp b/scene/2d/navigation_obstacle_2d.cpp index 252f71e69b..b594aa3bb2 100644 --- a/scene/2d/navigation_obstacle_2d.cpp +++ b/scene/2d/navigation_obstacle_2d.cpp @@ -82,7 +82,7 @@ void NavigationObstacle2D::_notification(int p_what) { } break; case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { - if (parent_node2d) { + if (parent_node2d && parent_node2d->is_inside_tree()) { NavigationServer2D::get_singleton()->agent_set_position(agent, parent_node2d->get_global_position()); } } break; @@ -130,13 +130,13 @@ void NavigationObstacle2D::reevaluate_agent_radius() { } real_t NavigationObstacle2D::estimate_agent_radius() const { - if (parent_node2d) { + if (parent_node2d && parent_node2d->is_inside_tree()) { // Estimate the radius of this physics body real_t radius = 0.0; for (int i(0); i < parent_node2d->get_child_count(); i++) { // For each collision shape CollisionShape2D *cs = Object::cast_to<CollisionShape2D>(parent_node2d->get_child(i)); - if (cs) { + if (cs && cs->is_inside_tree()) { // Take the distance between the Body center to the shape center real_t r = cs->get_transform().get_origin().length(); if (cs->get_shape().is_valid()) { @@ -147,6 +147,9 @@ real_t NavigationObstacle2D::estimate_agent_radius() const { r *= MAX(s.x, s.y); // Takes the biggest radius radius = MAX(radius, r); + } else if (cs && !cs->is_inside_tree()) { + WARN_PRINT("A CollisionShape2D of the NavigationObstacle2D parent node was not inside the SceneTree when estimating the obstacle radius." + "\nMove the NavigationObstacle2D to a child position below any CollisionShape2D node of the parent node so the CollisionShape2D is already inside the SceneTree."); } } Vector2 s = parent_node2d->get_global_scale(); |