void OnValidate() { if (SettingsPerType == null) { SettingsPerType = new List <TileTypeSettings>(); } foreach (var type in System.Enum.GetValues(typeof(TileType))) { if (type is TileType tileType) { var src = tileType; var settings = GetSettings(tileType); if (settings == null) { settings = new TileTypeSettings() { TileType = tileType }; SettingsPerType.Add(settings); } if (settings.Name == null || settings.Name.Length == 0) { settings.Name = settings.TileType.ToString(); } } SettingsPerType.Sort((a, b) => a.TileType.CompareTo(b.TileType)); } }
// Use this for initialization public BoardDecorator(GameBoard board, TileTypeSettings settings) { gameBoard = board; hexSettings = settings; mapWidth = gameBoard.getMapWidth(); mapHeight = gameBoard.getMapHeight(); hexSettings.setMapWidthHeight(mapWidth, mapHeight); allTiles = board.getTiles(); //hexSettings.setSettingAccordingToNumTiles (allTiles.Count, landTiles.Count); paintOceanTiles(allTiles, settings); landTiles = findLandTiles(allTiles); hexSettings.setTileTypeNumbersByTotalNumberOfHexes(landTiles.Count); paintLandTilesBySettings(allTiles, hexSettings); hexSettings.setDiceProbabilitiesByTotalNumberOfHexes(landTiles.Count); setTileIDsBySettings(landTiles, hexSettings); //board.placeRobberOnTile (desertTile.id + 1); generateIslands(); //List<GameTile> pirateTiles = getTilesForPirate (); //board.placePirateOnTile (pirateTiles [Random.Range(0, pirateTiles.Count)].id); }
public void GenerateBoard() { board = GetComponentInChildren <GameBoard> (); hexSettings = GetComponent <TileTypeSettings> (); //Set grid settings board.mapShape = mapShape; board.mapWidth = mapWidth; board.mapHeight = mapHeight; board.hexOrientation = hexOrientation; board.hexRadius = hexRadius; //Generate Grid board.GenerateTiles(this.transform); board.GenerateIntersections(this.transform); board.GenerateEdges(this.transform); //Set grid properties //board.setTileTypesAndValues (hexSettings); boardDecorator = new BoardDecorator(board, hexSettings); allTiles = boardDecorator.allTiles; landTiles = boardDecorator.landTiles; //board.GenerateHarbors (); }
public void paintLandTilesBySettings(List <GameTile> tiles, TileTypeSettings settings) { Dictionary <TileType, int> availableLandPieces = settings.getAvailableLandPiecesDictionary(); Dictionary <TileType, Material> materials = settings.getMaterialsDictionary(); List <GameTile> gameTiles = new List <GameTile> (landTiles); Debug.Log("GAMETILES.COUNT = " + gameTiles.Count); int randomNum; int maxMapDimension = Mathf.Max(mapWidth, mapHeight); int difference = maxMapDimension - hexSettings.oceanLayers; bool canBeLake; do { randomNum = Random.Range(0, gameTiles.Count); canBeLake = (Mathf.Abs(gameTiles[randomNum].index.x) + Mathf.Abs(gameTiles[randomNum].index.y) + Mathf.Abs(gameTiles[randomNum].index.z)) < (difference * 2); } while(!canBeLake); Renderer renderer = gameTiles [randomNum].GetComponent <Renderer> (); renderer.material = materials [TileType.Desert]; gameTiles[randomNum].tileType = TileType.Desert; gameTiles [randomNum].transform.FindChild("Dice Value").gameObject.SetActive(false); gameTiles [randomNum].transform.FindChild("Dice Values").gameObject.SetActive(true); desertTile = gameTiles[randomNum]; gameTiles.RemoveAt(randomNum); availableLandPieces [TileType.Desert]--; foreach (var pair in availableLandPieces) { for (int i = 0; i < pair.Value; i++) { randomNum = Random.Range(0, gameTiles.Count); renderer = gameTiles [randomNum].GetComponent <Renderer> (); renderer.material = materials [pair.Key]; gameTiles[randomNum].tileType = pair.Key; gameTiles [randomNum].transform.FindChild("Dice Value").gameObject.SetActive(true); gameTiles.RemoveAt(randomNum); if (gameTiles.Count == 0) { return; } } } }
public void setTileIDsBySettings(List <GameTile> tiles, TileTypeSettings settings) { Dictionary <int, int> diceProbabilities = settings.getDiceProbabilities(); List <GameTile> gameTiles = new List <GameTile> (tiles); int randomNum; foreach (var pair in diceProbabilities) { for (int i = 0; i < pair.Value; i++) { randomNum = Random.Range(0, gameTiles.Count); while (gameTiles [randomNum].tileType == TileType.Desert) { gameTiles.RemoveAt(randomNum); randomNum = Random.Range(0, gameTiles.Count); } gameTiles [randomNum].diceValue = pair.Key; TextMesh randomDiceValue = gameTiles [randomNum].transform.FindChild("Dice Value").gameObject.GetComponentInChildren <TextMesh>(); string diceValueString = pair.Key.ToString() + "\n"; for (int k = Mathf.Abs(pair.Key - 7); k < 6; k++) { diceValueString = diceValueString + "."; } randomDiceValue.text = diceValueString; if (pair.Key == 6 || pair.Key == 8) { randomDiceValue.color = Color.red; } else { randomDiceValue.color = Color.black; } gameTiles.RemoveAt(randomNum); if (gameTiles.Count == 0) { return; } } } }
private int paintOceanTiles(List <GameTile> tiles, TileTypeSettings settings) { int numOceanTiles = 0; for (int i = 0; i < tiles.Count; i++) { if (settings.IsOceanTileBySettings(tiles [i])) { hexSettings.assignTileTypeToHex(tiles[i], TileType.Ocean); tiles[i].transform.FindChild("Dice Value").gameObject.SetActive(false); tiles [i].atIslandLayer = true; numOceanTiles++; } } return(numOceanTiles); }
private void decorateTilesBySettings(List <GameTile> tiles, TileTypeSettings settings) { setTileIDsBySettings(tiles, settings); }
public void setSettings(TileTypeSettings settings) { boardSettings = settings; materials = boardSettings.getMaterialsDictionary(); }