コード例 #1
0
    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();
    }