summaryrefslogtreecommitdiff
path: root/scene/2d
diff options
context:
space:
mode:
authorPawel Lampe <pawel.lampe@gmail.com>2022-01-07 19:55:22 +0100
committerPawel Lampe <pawel.lampe@gmail.com>2022-01-07 19:55:22 +0100
commit9bda2d5859fd0fa62e837c26fc465e0a5ffbc60a (patch)
tree8d87ff7155b47eb71394f4f526859dcd01e23a4a /scene/2d
parent6e4da909aaa7ca70864016bac3a8fe424ee7194a (diff)
Fix NavigationObstacle errors
* `NavigationObstacle2D` premature radius estimation (before entering the tree) * `NavigationObstacle3D` premature radius estimation (before entering the tree)
Diffstat (limited to 'scene/2d')
-rw-r--r--scene/2d/navigation_obstacle_2d.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/scene/2d/navigation_obstacle_2d.cpp b/scene/2d/navigation_obstacle_2d.cpp
index e5df089771..fad54070a5 100644
--- a/scene/2d/navigation_obstacle_2d.cpp
+++ b/scene/2d/navigation_obstacle_2d.cpp
@@ -53,9 +53,9 @@ void NavigationObstacle2D::_validate_property(PropertyInfo &p_property) const {
void NavigationObstacle2D::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_READY: {
- initialize_agent();
+ case NOTIFICATION_ENTER_TREE: {
parent_node2d = Object::cast_to<Node2D>(get_parent());
+ reevaluate_agent_radius();
if (parent_node2d != nullptr) {
// place agent on navigation map first or else the RVO agent callback creation fails silently later
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), parent_node2d->get_world_2d()->get_navigation_map());
@@ -83,6 +83,7 @@ void NavigationObstacle2D::_notification(int p_what) {
NavigationObstacle2D::NavigationObstacle2D() {
agent = NavigationServer2D::get_singleton()->agent_create();
+ initialize_agent();
}
NavigationObstacle2D::~NavigationObstacle2D() {
@@ -110,7 +111,7 @@ void NavigationObstacle2D::initialize_agent() {
void NavigationObstacle2D::reevaluate_agent_radius() {
if (!estimate_radius) {
NavigationServer2D::get_singleton()->agent_set_radius(agent, radius);
- } else if (parent_node2d) {
+ } else if (parent_node2d && parent_node2d->is_inside_tree()) {
NavigationServer2D::get_singleton()->agent_set_radius(agent, estimate_agent_radius());
}
}