Skip to content

Commit f38b540

Browse files
authored
Merge pull request godotengine#75756 from smix8/fix_obstacle_avoidance_sim_4.x
Fix NavigationObstacles not being added to avoidance simulation
2 parents b5f5320 + aadf33e commit f38b540

4 files changed

+18
-0
lines changed

scene/2d/navigation_obstacle_2d.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -196,13 +196,20 @@ void NavigationObstacle2D::set_agent_parent(Node *p_agent_parent) {
196196
} else {
197197
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), parent_node2d->get_world_2d()->get_navigation_map());
198198
}
199+
// Need to register Callback as obstacle requires a valid Callback to be added to avoidance simulation.
200+
NavigationServer2D::get_singleton()->agent_set_callback(get_rid(), callable_mp(this, &NavigationObstacle2D::_avoidance_done));
199201
reevaluate_agent_radius();
200202
} else {
201203
parent_node2d = nullptr;
202204
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), RID());
205+
NavigationServer2D::get_singleton()->agent_set_callback(agent, Callable());
203206
}
204207
}
205208

209+
void NavigationObstacle2D::_avoidance_done(Vector3 p_new_velocity) {
210+
// Dummy function as obstacle requires a valid Callback to be added to avoidance simulation.
211+
}
212+
206213
void NavigationObstacle2D::set_navigation_map(RID p_navigation_map) {
207214
if (map_override == p_navigation_map) {
208215
return;

scene/2d/navigation_obstacle_2d.h

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ class NavigationObstacle2D : public Node {
7575

7676
PackedStringArray get_configuration_warnings() const override;
7777

78+
void _avoidance_done(Vector3 p_new_velocity); // Dummy
79+
7880
private:
7981
void initialize_agent();
8082
void reevaluate_agent_radius();

scene/3d/navigation_obstacle_3d.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,20 @@ void NavigationObstacle3D::set_agent_parent(Node *p_agent_parent) {
203203
} else {
204204
NavigationServer3D::get_singleton()->agent_set_map(get_rid(), parent_node3d->get_world_3d()->get_navigation_map());
205205
}
206+
// Need to register Callback as obstacle requires a valid Callback to be added to avoidance simulation.
207+
NavigationServer3D::get_singleton()->agent_set_callback(get_rid(), callable_mp(this, &NavigationObstacle3D::_avoidance_done));
206208
reevaluate_agent_radius();
207209
} else {
208210
parent_node3d = nullptr;
209211
NavigationServer3D::get_singleton()->agent_set_map(get_rid(), RID());
212+
NavigationServer3D::get_singleton()->agent_set_callback(agent, Callable());
210213
}
211214
}
212215

216+
void NavigationObstacle3D::_avoidance_done(Vector3 p_new_velocity) {
217+
// Dummy function as obstacle requires a valid Callback to be added to avoidance simulation.
218+
}
219+
213220
void NavigationObstacle3D::set_navigation_map(RID p_navigation_map) {
214221
if (map_override == p_navigation_map) {
215222
return;

scene/3d/navigation_obstacle_3d.h

+2
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ class NavigationObstacle3D : public Node {
7474

7575
PackedStringArray get_configuration_warnings() const override;
7676

77+
void _avoidance_done(Vector3 p_new_velocity); // Dummy
78+
7779
private:
7880
void initialize_agent();
7981
void reevaluate_agent_radius();

0 commit comments

Comments
 (0)