Răsfoiți Sursa

TileSet: Maintain NavigationPolygon sub-polygons when rotating

The original implementation merged sub-polygons into a single polygon
when rotating. This can cause non-simple geometries downstream
algorithms cannot handle.
Patrick Sean Klein 1 an în urmă
părinte
comite
2dc42e8a93
1 a modificat fișierele cu 5 adăugiri și 7 ștergeri
  1. 5 7
      scene/resources/2d/tile_set.cpp

+ 5 - 7
scene/resources/2d/tile_set.cpp

@@ -6489,18 +6489,16 @@ Ref<NavigationPolygon> TileData::get_navigation_polygon(int p_layer_id, bool p_f
 		PackedVector2Array new_points = get_transformed_vertices(layer_tile_data.navigation_polygon->get_vertices(), p_flip_h, p_flip_v, p_transpose);
 		transformed_polygon->set_vertices(new_points);
 
+		int num_polygons = layer_tile_data.navigation_polygon->get_polygon_count();
+		for (int i = 0; i < num_polygons; ++i) {
+			transformed_polygon->add_polygon(layer_tile_data.navigation_polygon->get_polygon(i));
+		}
+
 		for (int i = 0; i < layer_tile_data.navigation_polygon->get_outline_count(); i++) {
 			PackedVector2Array new_outline = get_transformed_vertices(layer_tile_data.navigation_polygon->get_outline(i), p_flip_h, p_flip_v, p_transpose);
 			transformed_polygon->add_outline(new_outline);
 		}
 
-		PackedInt32Array indices;
-		indices.resize(new_points.size());
-		int *w = indices.ptrw();
-		for (int i = 0; i < new_points.size(); i++) {
-			w[i] = i;
-		}
-		transformed_polygon->add_polygon(indices);
 		layer_tile_data.transformed_navigation_polygon[key] = transformed_polygon;
 		return transformed_polygon;
 	} else {