Merge pull request #72947 from DarkKilauea/nav-fix-avoidance-callback

Fix missing avoidance updates when using same velocity
This commit is contained in:
Rémi Verschelde 2023-02-09 10:13:35 +01:00
commit d69809cab6
No known key found for this signature in database
GPG Key ID: C3336907360768E1
2 changed files with 10 additions and 12 deletions

View File

@ -434,9 +434,8 @@ real_t NavigationAgent2D::get_path_max_distance() {
} }
void NavigationAgent2D::set_target_position(Vector2 p_position) { void NavigationAgent2D::set_target_position(Vector2 p_position) {
if (target_position.is_equal_approx(p_position)) { // Intentionally not checking for equality of the parameter, as we want to update the path even if the target position is the same in case the world changed.
return; // Revisit later when the navigation server can update the path without requesting a new path.
}
target_position = p_position; target_position = p_position;
target_position_submitted = true; target_position_submitted = true;
@ -489,9 +488,9 @@ Vector2 NavigationAgent2D::get_final_position() {
} }
void NavigationAgent2D::set_velocity(Vector2 p_velocity) { void NavigationAgent2D::set_velocity(Vector2 p_velocity) {
if (target_velocity.is_equal_approx(p_velocity)) { // Intentionally not checking for equality of the parameter.
return; // We need to always submit the velocity to the navigation server, even when it is the same, in order to run avoidance every frame.
} // Revisit later when the navigation server can update avoidance without users resubmitting the velocity.
target_velocity = p_velocity; target_velocity = p_velocity;
velocity_submitted = true; velocity_submitted = true;

View File

@ -459,9 +459,8 @@ real_t NavigationAgent3D::get_path_max_distance() {
} }
void NavigationAgent3D::set_target_position(Vector3 p_position) { void NavigationAgent3D::set_target_position(Vector3 p_position) {
if (target_position.is_equal_approx(p_position)) { // Intentionally not checking for equality of the parameter, as we want to update the path even if the target position is the same in case the world changed.
return; // Revisit later when the navigation server can update the path without requesting a new path.
}
target_position = p_position; target_position = p_position;
target_position_submitted = true; target_position_submitted = true;
@ -514,9 +513,9 @@ Vector3 NavigationAgent3D::get_final_position() {
} }
void NavigationAgent3D::set_velocity(Vector3 p_velocity) { void NavigationAgent3D::set_velocity(Vector3 p_velocity) {
if (target_velocity.is_equal_approx(p_velocity)) { // Intentionally not checking for equality of the parameter.
return; // We need to always submit the velocity to the navigation server, even when it is the same, in order to run avoidance every frame.
} // Revisit later when the navigation server can update avoidance without users resubmitting the velocity.
target_velocity = p_velocity; target_velocity = p_velocity;
velocity_submitted = true; velocity_submitted = true;