private void _findAreas(TerrainData data) { HashSet<Block> visited = new HashSet<Block>(); int width = data.Width; int height = data.Height; LinkedList<Area> areas = new LinkedList<Area>(); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { Block block = data.GetBlock(new Point(x, y)); if (block.Value > 0 && !visited.Contains(block)) { Area newArea = _floodFillArea(block, visited); if (newArea != null) areas.AddLast(newArea); } } } foreach (Area area in areas) { data.AddArea(area); } }