예제 #1
0
    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);
        }
    }