Skip to content

Commit a39f6b1

Browse files
committed
Remove get_used_cells to avoid unecessary allocations in navigation baking
1 parent 34f005d commit a39f6b1

File tree

2 files changed

+15
-18
lines changed

2 files changed

+15
-18
lines changed

editor/plugins/tiles/tiles_editor_plugin.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -93,25 +93,23 @@ void TilesEditorUtils::_thread() {
9393
viewport->set_transparent_background(true);
9494
viewport->set_update_mode(SubViewport::UPDATE_ONCE);
9595

96-
TileMap *tile_map = memnew(TileMap);
97-
tile_map->set_tileset(item.tile_set);
98-
tile_map->set_pattern(0, Vector2(), item.pattern);
99-
viewport->add_child(tile_map);
100-
101-
TypedArray<Vector2i> used_cells = tile_map->get_used_cells(0);
96+
TileMapLayer *tile_map_layer = memnew(TileMapLayer);
97+
tile_map_layer->set_tile_set(item.tile_set);
98+
tile_map_layer->set_pattern(Vector2(), item.pattern);
99+
viewport->add_child(tile_map_layer);
102100

103101
Rect2 encompassing_rect;
104-
encompassing_rect.set_position(tile_map->map_to_local(used_cells[0]));
105-
for (int i = 0; i < used_cells.size(); i++) {
106-
Vector2i cell = used_cells[i];
107-
Vector2 world_pos = tile_map->map_to_local(cell);
102+
encompassing_rect.set_position(tile_map_layer->map_to_local(tile_map_layer->get_tile_map_layer_data().begin()->key));
103+
for (KeyValue<Vector2i, CellData> kv : tile_map_layer->get_tile_map_layer_data()) {
104+
Vector2i cell = kv.key;
105+
Vector2 world_pos = tile_map_layer->map_to_local(cell);
108106
encompassing_rect.expand_to(world_pos);
109107

110108
// Texture.
111-
Ref<TileSetAtlasSource> atlas_source = item.tile_set->get_source(tile_map->get_cell_source_id(0, cell));
109+
Ref<TileSetAtlasSource> atlas_source = item.tile_set->get_source(tile_map_layer->get_cell_source_id(cell));
112110
if (atlas_source.is_valid()) {
113-
Vector2i coords = tile_map->get_cell_atlas_coords(0, cell);
114-
int alternative = tile_map->get_cell_alternative_tile(0, cell);
111+
Vector2i coords = tile_map_layer->get_cell_atlas_coords(cell);
112+
int alternative = tile_map_layer->get_cell_alternative_tile(cell);
115113

116114
if (atlas_source->has_tile(coords) && atlas_source->has_alternative_tile(coords, alternative)) {
117115
Vector2 center = world_pos - atlas_source->get_tile_data(coords, alternative)->get_texture_origin();
@@ -122,8 +120,8 @@ void TilesEditorUtils::_thread() {
122120
}
123121

124122
Vector2 scale = thumbnail_size2 / MAX(encompassing_rect.size.x, encompassing_rect.size.y);
125-
tile_map->set_scale(scale);
126-
tile_map->set_position(-(scale * encompassing_rect.get_center()) + thumbnail_size2 / 2);
123+
tile_map_layer->set_scale(scale);
124+
tile_map_layer->set_position(-(scale * encompassing_rect.get_center()) + thumbnail_size2 / 2);
127125

128126
// Add the viewport at the last moment to avoid rendering too early.
129127
callable_mp((Node *)EditorNode::get_singleton(), &Node::add_child).call_deferred(viewport, false, Node::INTERNAL_MODE_DISABLED);

scene/2d/tile_map_layer.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3418,9 +3418,8 @@ void TileMapLayer::navmesh_parse_source_geometry(const Ref<NavigationPolygon> &p
34183418

34193419
const Transform2D tilemap_xform = p_source_geometry_data->root_node_transform * tile_map_layer->get_global_transform();
34203420

3421-
TypedArray<Vector2i> used_cells = tile_map_layer->get_used_cells();
3422-
for (int used_cell_index = 0; used_cell_index < used_cells.size(); used_cell_index++) {
3423-
const Vector2i &cell = used_cells[used_cell_index];
3421+
for (KeyValue<Vector2i, CellData> kv : tile_map_layer->get_tile_map_layer_data()) {
3422+
const Vector2i &cell = kv.key;
34243423

34253424
const TileData *tile_data = tile_map_layer->get_cell_tile_data(cell);
34263425
if (tile_data == nullptr) {

0 commit comments

Comments
 (0)