mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 12:12:28 +00:00
Merge pull request #69688 from smix8/navagent_stop_origin_automove_4.x
Stop NavigationAgents without a target from moving to world origin
This commit is contained in:
commit
f84c308cf8
@ -168,7 +168,7 @@ void NavigationAgent2D::_notification(int p_what) {
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
|
||||
if (agent_parent) {
|
||||
if (agent_parent && target_position_submitted) {
|
||||
if (avoidance_enabled) {
|
||||
// agent_position on NavigationServer is avoidance only and has nothing to do with pathfinding
|
||||
// no point in flooding NavigationServer queue with agent position updates that get send to the void if avoidance is not used
|
||||
@ -329,6 +329,7 @@ real_t NavigationAgent2D::get_path_max_distance() {
|
||||
|
||||
void NavigationAgent2D::set_target_location(Vector2 p_location) {
|
||||
target_location = p_location;
|
||||
target_position_submitted = true;
|
||||
_request_repath();
|
||||
}
|
||||
|
||||
@ -413,6 +414,9 @@ void NavigationAgent2D::update_navigation() {
|
||||
if (!agent_parent->is_inside_tree()) {
|
||||
return;
|
||||
}
|
||||
if (!target_position_submitted) {
|
||||
return;
|
||||
}
|
||||
if (update_frame_id == Engine::get_singleton()->get_physics_frames()) {
|
||||
return;
|
||||
}
|
||||
@ -519,6 +523,7 @@ void NavigationAgent2D::update_navigation() {
|
||||
_check_distance_to_target();
|
||||
navigation_path_index -= 1;
|
||||
navigation_finished = true;
|
||||
target_position_submitted = false;
|
||||
emit_signal(SNAME("navigation_finished"));
|
||||
break;
|
||||
}
|
||||
|
@ -61,6 +61,7 @@ class NavigationAgent2D : public Node {
|
||||
real_t path_max_distance = 3.0;
|
||||
|
||||
Vector2 target_location;
|
||||
bool target_position_submitted = false;
|
||||
Ref<NavigationPathQueryParameters2D> navigation_query;
|
||||
Ref<NavigationPathQueryResult2D> navigation_result;
|
||||
int navigation_path_index = 0;
|
||||
|
@ -174,7 +174,7 @@ void NavigationAgent3D::_notification(int p_what) {
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
|
||||
if (agent_parent) {
|
||||
if (agent_parent && target_position_submitted) {
|
||||
if (avoidance_enabled) {
|
||||
// agent_position on NavigationServer is avoidance only and has nothing to do with pathfinding
|
||||
// no point in flooding NavigationServer queue with agent position updates that get send to the void if avoidance is not used
|
||||
@ -345,6 +345,7 @@ real_t NavigationAgent3D::get_path_max_distance() {
|
||||
|
||||
void NavigationAgent3D::set_target_location(Vector3 p_location) {
|
||||
target_location = p_location;
|
||||
target_position_submitted = true;
|
||||
_request_repath();
|
||||
}
|
||||
|
||||
@ -428,6 +429,9 @@ void NavigationAgent3D::update_navigation() {
|
||||
if (!agent_parent->is_inside_tree()) {
|
||||
return;
|
||||
}
|
||||
if (!target_position_submitted) {
|
||||
return;
|
||||
}
|
||||
if (update_frame_id == Engine::get_singleton()->get_physics_frames()) {
|
||||
return;
|
||||
}
|
||||
@ -536,6 +540,7 @@ void NavigationAgent3D::update_navigation() {
|
||||
_check_distance_to_target();
|
||||
navigation_path_index -= 1;
|
||||
navigation_finished = true;
|
||||
target_position_submitted = false;
|
||||
emit_signal(SNAME("navigation_finished"));
|
||||
break;
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ class NavigationAgent3D : public Node {
|
||||
real_t path_max_distance = 3.0;
|
||||
|
||||
Vector3 target_location;
|
||||
bool target_position_submitted = false;
|
||||
Ref<NavigationPathQueryParameters3D> navigation_query;
|
||||
Ref<NavigationPathQueryResult3D> navigation_result;
|
||||
int navigation_path_index = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user