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; } } }
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; } }