소스 검색

Fix NavigationObstacles not being added to avoidance simulation

Fixes NavigationObstacles not being added to avoidance simulation.
smix8 2 년 전
부모
커밋
aadf33efd8
4개의 변경된 파일18개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      scene/2d/navigation_obstacle_2d.cpp
  2. 2 0
      scene/2d/navigation_obstacle_2d.h
  3. 7 0
      scene/3d/navigation_obstacle_3d.cpp
  4. 2 0
      scene/3d/navigation_obstacle_3d.h

+ 7 - 0
scene/2d/navigation_obstacle_2d.cpp

@@ -196,13 +196,20 @@ void NavigationObstacle2D::set_agent_parent(Node *p_agent_parent) {
 		} else {
 			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();
 	} else {
 		parent_node2d = nullptr;
 		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) {
 	if (map_override == p_navigation_map) {
 		return;

+ 2 - 0
scene/2d/navigation_obstacle_2d.h

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

+ 7 - 0
scene/3d/navigation_obstacle_3d.cpp

@@ -203,13 +203,20 @@ void NavigationObstacle3D::set_agent_parent(Node *p_agent_parent) {
 		} else {
 			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();
 	} else {
 		parent_node3d = nullptr;
 		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) {
 	if (map_override == p_navigation_map) {
 		return;

+ 2 - 0
scene/3d/navigation_obstacle_3d.h

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