mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 11:32:13 +00:00
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:
commit
f38b540273
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user