protected void AnalyzeMap() { colorMap.CheckConnected(); for (int x = colorMap.GetLeft(); x <= colorMap.GetRight(); ++x) { for (int y = colorMap.GetTop(); y <= colorMap.GetBottom(); ++y) { int val = colorMap.Get(x, y); if (val == /* null? */ 0) { continue; } Group group = groups[val]; if (group == null) { group = new Group(val); groups[val] = group; } group.coords.Add(new Vector2Int(x, y)); } } // Debug.Log(groups.Count + " groups"); foreach (Group group in groups.Values) { foreach (Vector2Int xy in group.coords) { Vector2Int[] directions = new Vector2Int[] { Vector2Int.up, Vector2Int.right, Vector2Int.down, Vector2Int.left }; foreach (Vector2Int d in directions) { Vector2Int neighbor = xy + d; if (group.coords.Contains(neighbor)) { continue; } int val = colorMap.Get(neighbor.x, neighbor.y); if (val != /* null? */ 0 && AllowRoomsToBeAdjacent(group.id, val)) { group.adjacentGroups.Add(val); } } } } CheckConnected(); }