Esempio n. 1
0
    public void PrintMap()
    {
        tileBoard = new MapCreationTile[sizeX, sizeY];

        for (int x = 0; x < sizeX; x++)
        {
            for (int y = 0; y < sizeY; y++)
            {
                MapCreationTile tile = Instantiate <MapCreationTile>(tilePrefab, mapContainer.transform);
                tile.transform.position = Globals.GridToWorld(x + (int)mapContainer.position.x, y + (int)mapContainer.position.y);
                tile.name = x + " " + y;
                tile.InitMapTile(mapDataModel.tileBoard[x, y], x, y);
                tileBoard[x, y] = tile;
            }
        }
    }
Esempio n. 2
0
    public void FillMap(int startPosX, int startPosY, string newType)
    {
        Stack <MapCreationTile>   tileStack   = new Stack <MapCreationTile>();
        HashSet <MapCreationTile> visitedSet  = new HashSet <MapCreationTile>();
        List <MapCreationTile>    tilesToFill = new List <MapCreationTile>();

        MapCreationTile currTile = tileBoard[startPosX, startPosY];

        string tileTypeToFill = currTile.currType;

        tileStack.Push(currTile);

        while (tileStack.Count > 0)
        {
            if (currTile.currType == tileTypeToFill)
            {
                tilesToFill.Add(currTile);

                MapCreationTile testTile;

                int x = currTile.posX;
                int y = currTile.posY;

                if (InBounds(x, y + 1))
                {
                    testTile = tileBoard[x, y + 1];

                    if (testTile.currType == tileTypeToFill &&
                        !visitedSet.Contains(testTile))
                    {
                        tileStack.Push(testTile);
                        visitedSet.Add(testTile);
                    }
                }

                if (InBounds(x + 1, y))
                {
                    testTile = tileBoard[x + 1, y];

                    if (testTile.currType == tileTypeToFill &&
                        !visitedSet.Contains(testTile))
                    {
                        tileStack.Push(testTile);
                        visitedSet.Add(testTile);
                    }
                }

                if (InBounds(x, y - 1))
                {
                    testTile = tileBoard[x, y - 1];

                    if (InBounds(x, y - 1) &&
                        testTile.currType == tileTypeToFill &&
                        !visitedSet.Contains(testTile))
                    {
                        tileStack.Push(testTile);
                        visitedSet.Add(testTile);
                    }
                }


                if (InBounds(x - 1, y))
                {
                    testTile = tileBoard[x - 1, y];
                    if (testTile.currType == tileTypeToFill &&
                        !visitedSet.Contains(testTile))
                    {
                        tileStack.Push(testTile);
                        visitedSet.Add(testTile);
                    }
                }



                currTile = tileStack.Pop();
            }
        }

        foreach (MapCreationTile tile in tilesToFill)
        {
            tile.ChangeTileType(newType);
            mapDataModel.tileBoard[tile.posX, tile.posY] = newType;
        }
    }