Browse Source

Do not iterate over map when removing its values

Rafał Mikrut 4 years ago
parent
commit
29b2882381
1 changed files with 3 additions and 1 deletions
  1. 3 1
      scene/2d/tile_map.cpp

+ 3 - 1
scene/2d/tile_map.cpp

@@ -1024,7 +1024,9 @@ void TileMap::update_dirty_bitmask() {
 
 
 void TileMap::fix_invalid_tiles() {
 void TileMap::fix_invalid_tiles() {
 	ERR_FAIL_COND_MSG(tile_set.is_null(), "Cannot fix invalid tiles if Tileset is not open.");
 	ERR_FAIL_COND_MSG(tile_set.is_null(), "Cannot fix invalid tiles if Tileset is not open.");
-	for (Map<PosKey, Cell>::Element *E = tile_map.front(); E; E = E->next()) {
+
+	Map<PosKey, Cell> temp_tile_map = tile_map;
+	for (Map<PosKey, Cell>::Element *E = temp_tile_map.front(); E; E = E->next()) {
 		if (!tile_set->has_tile(get_cell(E->key().x, E->key().y))) {
 		if (!tile_set->has_tile(get_cell(E->key().x, E->key().y))) {
 			set_cell(E->key().x, E->key().y, INVALID_CELL);
 			set_cell(E->key().x, E->key().y, INVALID_CELL);
 		}
 		}