예제 #1
0
    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));
        }
    }
예제 #2
0
    // 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);
    }
예제 #3
0
    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 ();
    }
예제 #4
0
    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;
                }
            }
        }
    }
예제 #5
0
    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;
                }
            }
        }
    }
예제 #6
0
    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);
    }
예제 #7
0
 private void decorateTilesBySettings(List <GameTile> tiles, TileTypeSettings settings)
 {
     setTileIDsBySettings(tiles, settings);
 }
예제 #8
0
 public void setSettings(TileTypeSettings settings)
 {
     boardSettings = settings;
     materials     = boardSettings.getMaterialsDictionary();
 }