summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scene/2d/navigation_obstacle_2d.cpp7
-rw-r--r--scene/2d/navigation_obstacle_2d.h2
-rw-r--r--scene/3d/navigation_obstacle_3d.cpp7
-rw-r--r--scene/3d/navigation_obstacle_3d.h2
4 files changed, 18 insertions, 0 deletions
diff --git a/scene/2d/navigation_obstacle_2d.cpp b/scene/2d/navigation_obstacle_2d.cpp
index d7ef77e25b..2366cb696e 100644
--- a/scene/2d/navigation_obstacle_2d.cpp
+++ b/scene/2d/navigation_obstacle_2d.cpp
@@ -196,13 +196,20 @@ void NavigationObstacle2D::set_agent_parent(Node *p_agent_parent) {
} else {
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), parent_node2d->get_world_2d()->get_navigation_map());
}
+ // Need to register Callback as obstacle requires a valid Callback to be added to avoidance simulation.
+ NavigationServer2D::get_singleton()->agent_set_callback(get_rid(), callable_mp(this, &NavigationObstacle2D::_avoidance_done));
reevaluate_agent_radius();
} else {
parent_node2d = nullptr;
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), RID());
+ NavigationServer2D::get_singleton()->agent_set_callback(agent, Callable());
}
}
+void NavigationObstacle2D::_avoidance_done(Vector3 p_new_velocity) {
+ // Dummy function as obstacle requires a valid Callback to be added to avoidance simulation.
+}
+
void NavigationObstacle2D::set_navigation_map(RID p_navigation_map) {
if (map_override == p_navigation_map) {
return;
diff --git a/scene/2d/navigation_obstacle_2d.h b/scene/2d/navigation_obstacle_2d.h
index 12ddcaf219..f856c481b0 100644
--- a/scene/2d/navigation_obstacle_2d.h
+++ b/scene/2d/navigation_obstacle_2d.h
@@ -75,6 +75,8 @@ public:
PackedStringArray get_configuration_warnings() const override;
+ void _avoidance_done(Vector3 p_new_velocity); // Dummy
+
private:
void initialize_agent();
void reevaluate_agent_radius();
diff --git a/scene/3d/navigation_obstacle_3d.cpp b/scene/3d/navigation_obstacle_3d.cpp
index 85b3c164cc..14d93fb0e0 100644
--- a/scene/3d/navigation_obstacle_3d.cpp
+++ b/scene/3d/navigation_obstacle_3d.cpp
@@ -203,13 +203,20 @@ void NavigationObstacle3D::set_agent_parent(Node *p_agent_parent) {
} else {
NavigationServer3D::get_singleton()->agent_set_map(get_rid(), parent_node3d->get_world_3d()->get_navigation_map());
}
+ // Need to register Callback as obstacle requires a valid Callback to be added to avoidance simulation.
+ NavigationServer3D::get_singleton()->agent_set_callback(get_rid(), callable_mp(this, &NavigationObstacle3D::_avoidance_done));
reevaluate_agent_radius();
} else {
parent_node3d = nullptr;
NavigationServer3D::get_singleton()->agent_set_map(get_rid(), RID());
+ NavigationServer3D::get_singleton()->agent_set_callback(agent, Callable());
}
}
+void NavigationObstacle3D::_avoidance_done(Vector3 p_new_velocity) {
+ // Dummy function as obstacle requires a valid Callback to be added to avoidance simulation.
+}
+
void NavigationObstacle3D::set_navigation_map(RID p_navigation_map) {
if (map_override == p_navigation_map) {
return;
diff --git a/scene/3d/navigation_obstacle_3d.h b/scene/3d/navigation_obstacle_3d.h
index 416b32c026..c5a9d737f6 100644
--- a/scene/3d/navigation_obstacle_3d.h
+++ b/scene/3d/navigation_obstacle_3d.h
@@ -74,6 +74,8 @@ public:
PackedStringArray get_configuration_warnings() const override;
+ void _avoidance_done(Vector3 p_new_velocity); // Dummy
+
private:
void initialize_agent();
void reevaluate_agent_radius();