From 2dc42e8a93233a7a00ec8b18fbd386ab51379918 Mon Sep 17 00:00:00 2001 From: Patrick Sean Klein Date: Sun, 9 Jun 2024 22:42:03 +0100 Subject: [PATCH] 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. --- scene/resources/2d/tile_set.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/scene/resources/2d/tile_set.cpp b/scene/resources/2d/tile_set.cpp index 6c3356a2059..d124577d25b 100644 --- a/scene/resources/2d/tile_set.cpp +++ b/scene/resources/2d/tile_set.cpp @@ -6489,18 +6489,16 @@ Ref 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 {