Browse Source

Fix missing NavigationAgent property updates in constructor

Fixes missing NavigationAgent property updates in constructor.

(cherry picked from commit 9640179f9308a4ca69905bfbe128812f6f0e2a3a)
smix8 1 year ago
parent
commit
ece0c0c4a4
2 changed files with 15 additions and 11 deletions
  1. 7 5
      scene/2d/navigation_agent_2d.cpp
  2. 8 6
      scene/3d/navigation_agent_3d.cpp

+ 7 - 5
scene/2d/navigation_agent_2d.cpp

@@ -294,6 +294,13 @@ NavigationAgent2D::NavigationAgent2D() {
 	NavigationServer2D::get_singleton()->agent_set_time_horizon_obstacles(agent, time_horizon_obstacles);
 	NavigationServer2D::get_singleton()->agent_set_radius(agent, radius);
 	NavigationServer2D::get_singleton()->agent_set_max_speed(agent, max_speed);
+	NavigationServer2D::get_singleton()->agent_set_avoidance_layers(agent, avoidance_layers);
+	NavigationServer2D::get_singleton()->agent_set_avoidance_mask(agent, avoidance_mask);
+	NavigationServer2D::get_singleton()->agent_set_avoidance_priority(agent, avoidance_priority);
+	NavigationServer2D::get_singleton()->agent_set_avoidance_enabled(agent, avoidance_enabled);
+	if (avoidance_enabled) {
+		NavigationServer2D::get_singleton()->agent_set_avoidance_callback(agent, callable_mp(this, &NavigationAgent2D::_avoidance_done));
+	}
 
 	// Preallocate query and result objects to improve performance.
 	navigation_query = Ref<NavigationPathQueryParameters2D>();
@@ -302,11 +309,6 @@ NavigationAgent2D::NavigationAgent2D() {
 	navigation_result = Ref<NavigationPathQueryResult2D>();
 	navigation_result.instantiate();
 
-	set_avoidance_layers(avoidance_layers);
-	set_avoidance_mask(avoidance_mask);
-	set_avoidance_priority(avoidance_priority);
-	set_avoidance_enabled(avoidance_enabled);
-
 #ifdef DEBUG_ENABLED
 	NavigationServer2D::get_singleton()->connect(SNAME("navigation_debug_changed"), callable_mp(this, &NavigationAgent2D::_navigation_debug_changed));
 #endif // DEBUG_ENABLED

+ 8 - 6
scene/3d/navigation_agent_3d.cpp

@@ -327,6 +327,14 @@ NavigationAgent3D::NavigationAgent3D() {
 	NavigationServer3D::get_singleton()->agent_set_radius(agent, radius);
 	NavigationServer3D::get_singleton()->agent_set_height(agent, height);
 	NavigationServer3D::get_singleton()->agent_set_max_speed(agent, max_speed);
+	NavigationServer3D::get_singleton()->agent_set_avoidance_layers(agent, avoidance_layers);
+	NavigationServer3D::get_singleton()->agent_set_avoidance_mask(agent, avoidance_mask);
+	NavigationServer3D::get_singleton()->agent_set_avoidance_priority(agent, avoidance_priority);
+	NavigationServer3D::get_singleton()->agent_set_use_3d_avoidance(agent, use_3d_avoidance);
+	NavigationServer3D::get_singleton()->agent_set_avoidance_enabled(agent, avoidance_enabled);
+	if (avoidance_enabled) {
+		NavigationServer3D::get_singleton()->agent_set_avoidance_callback(agent, callable_mp(this, &NavigationAgent3D::_avoidance_done));
+	}
 
 	// Preallocate query and result objects to improve performance.
 	navigation_query = Ref<NavigationPathQueryParameters3D>();
@@ -335,12 +343,6 @@ NavigationAgent3D::NavigationAgent3D() {
 	navigation_result = Ref<NavigationPathQueryResult3D>();
 	navigation_result.instantiate();
 
-	set_avoidance_layers(avoidance_layers);
-	set_avoidance_mask(avoidance_mask);
-	set_avoidance_priority(avoidance_priority);
-	set_use_3d_avoidance(use_3d_avoidance);
-	set_avoidance_enabled(avoidance_enabled);
-
 #ifdef DEBUG_ENABLED
 	NavigationServer3D::get_singleton()->connect(SNAME("navigation_debug_changed"), callable_mp(this, &NavigationAgent3D::_navigation_debug_changed));
 #endif // DEBUG_ENABLED