Merge pull request #75756 from smix8/fix_obstacle_avoidance_sim_4.x

Fix NavigationObstacles not being added to avoidance simulation
This commit is contained in:
Yuri Sizov 2023-04-07 15:11:40 +02:00 committed by GitHub
commit f38b540273
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 0 deletions

View File

@ -196,13 +196,20 @@ void NavigationObstacle2D::set_agent_parent(Node *p_agent_parent) {
} else { } else {
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), parent_node2d->get_world_2d()->get_navigation_map()); 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(); reevaluate_agent_radius();
} else { } else {
parent_node2d = nullptr; parent_node2d = nullptr;
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), RID()); 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) { void NavigationObstacle2D::set_navigation_map(RID p_navigation_map) {
if (map_override == p_navigation_map) { if (map_override == p_navigation_map) {
return; return;

View File

@ -75,6 +75,8 @@ public:
PackedStringArray get_configuration_warnings() const override; PackedStringArray get_configuration_warnings() const override;
void _avoidance_done(Vector3 p_new_velocity); // Dummy
private: private:
void initialize_agent(); void initialize_agent();
void reevaluate_agent_radius(); void reevaluate_agent_radius();

View File

@ -203,13 +203,20 @@ void NavigationObstacle3D::set_agent_parent(Node *p_agent_parent) {
} else { } else {
NavigationServer3D::get_singleton()->agent_set_map(get_rid(), parent_node3d->get_world_3d()->get_navigation_map()); 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(); reevaluate_agent_radius();
} else { } else {
parent_node3d = nullptr; parent_node3d = nullptr;
NavigationServer3D::get_singleton()->agent_set_map(get_rid(), RID()); 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) { void NavigationObstacle3D::set_navigation_map(RID p_navigation_map) {
if (map_override == p_navigation_map) { if (map_override == p_navigation_map) {
return; return;

View File

@ -74,6 +74,8 @@ public:
PackedStringArray get_configuration_warnings() const override; PackedStringArray get_configuration_warnings() const override;
void _avoidance_done(Vector3 p_new_velocity); // Dummy
private: private:
void initialize_agent(); void initialize_agent();
void reevaluate_agent_radius(); void reevaluate_agent_radius();