예제 #1
0
    public HexTile CreateTile(HexTileData hexTileData, Player owner, HexTileRole hexTileRole)
    {
        var ans = Instantiate(HexTilePrefab);

        ans.Init(hexTileData, owner, hexTileRole);
        return(ans);
    }
예제 #2
0
    public void CreateOption(int index)
    {
        var uiChooseTile = UIManager.Singleton.UIChoosingTile;

        HexTile hexTile = null;

        if (index == 0)
        {
            hexTile = HexUtils.BuildHexTile(_hexTile.Data, Player.MyPlayer, HexTileRole.InUI);
        }
        else
        {
            var         affordAble = false;
            var         counter    = 0;
            HexTileData randomData = null;
            while (!affordAble)
            {
                randomData = HexUtils.CreateRandomData(_hexTile.Data.X, _hexTile.Data.Y);
                counter++;
                if (counter == 100)
                {
                    randomData = _hexTile.Data;
                    UnityEngine.Debug.LogWarning("Could not find Random Data");
                }
                affordAble = Player.MyPlayer.HasResource(HexUtils.CalcHexPrice(randomData));
            }

            hexTile = HexUtils.BuildHexTile(randomData, Player.MyPlayer, HexTileRole.InUI);
        }

        hexTile.transform.SetParent(uiChooseTile.ChoosingTransforms[index].transform, false);

        hexTile.OnClickCallback = OnTileChosen;
    }
예제 #3
0
    public static HexEdgeData GetClockwiseEdge(HexTileData hexTileData, HexEdgeData currentHex, int index)
    {
        var size     = currentHex.MyHexTile.HexEdgesData.Count;
        var newIndex = ((int)currentHex.HexDiraction + size + index) % size;

        return(hexTileData.HexEdgesData[newIndex]);
    }
예제 #4
0
    public static List <City> CityCheckStart(HexTileData hexTileData)
    {
        var ans = new List <City>();

        foreach (var edge in hexTileData.HexEdgesData)
        {
            if (edge.HexEdgeType == HexEdgeType.Desert)
            {
                continue;
            }

            foreach (var city in ans)
            {
                if (city.CityEdges.Contains(edge))
                {
                    continue;
                }
            }

            var visited = new List <HexEdgeData>();

            if (CityEdgesCheck(visited, edge))
            {
                var city = new City(visited);
                ans.Add(city);
            }
        }
        return(ans);
    }
예제 #5
0
 public HexEdgeData(HexTileData myHexTile, HexEdgeType hexEdgeType, HexDiraction hexDiraction, bool isOpen = false)
 {
     MyHexTile    = myHexTile;
     HexEdgeType  = hexEdgeType;
     HexDiraction = hexDiraction;
     IsOpen       = isOpen;
 }
예제 #6
0
    public static Vector3 GetHexTilePosition(HexTileData hexData)
    {
        var hexSize = GridManager.Singleton.HexSize;
        var x       = hexSize * (Mathf.Sqrt(3) * hexData.X + ((Mathf.Sqrt(3) * hexData.Y) / 2));
        var y       = (hexSize * 3 * hexData.Y) / 2;

        return(new Vector3(x, y, 0));
    }
예제 #7
0
    public void Init(HexTileData hexTileData, Player owner, HexTileRole hexTileRole)
    {
        HexTileRole = hexTileRole;
        Data        = hexTileData;
        Data.Owner  = owner;

        CreateEdges();

        _isInitialized  = true;
        gameObject.name = "X : " + hexTileData.X + "Y : " + hexTileData.Y;
    }
예제 #8
0
    public static Price CalcHexPrice(HexTileData hexTileData)
    {
        Price ans = new Price();

        ans.Init();
        foreach (var hexEdgeData in hexTileData.HexEdgesData)
        {
            ans.Add(CalcHexEdgePrice(hexEdgeData));
        }
        return(ans);
    }
예제 #9
0
    public static HexTileData CreateRandomData(int x, int y)
    {
        var ans       = new HexTileData(x, y, null);
        var edgesData = new List <HexEdgeData>();

        foreach (var diraction in Utils.EnumUtil.GetValues <HexDiraction>())
        {
            edgesData.Add(CreateRandomEdgeData(x, y, diraction));
        }
        ans.HexEdgesData = edgesData;
        return(ans);
    }
예제 #10
0
    public static HexEdgeData GetConnectedEdge(HexTileData hexTileData, HexEdgeData edgeData)
    {
        var hexDiraction = edgeData.HexDiraction;
        var hexTile      = GridManager.Singleton.GetHex(hexTileData.GetVector());
        var nieghborTile = GetNeighborTile(hexTile, hexDiraction);

        if (nieghborTile == null)
        {
            return(null);
        }

        return(nieghborTile.Data.HexEdgesData[(int)HexUtils.OppsiteHex[hexDiraction]]);
    }
    public GridData()
    {
        width   = Map.Instance.GetWidth();
        height  = Map.Instance.GetHeight();
        hexGrid = new HexTileData[width, height];

        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                hexGrid[x, y] = new HexTileData(x, y, true, -1);
            }
        }
    }
예제 #12
0
    public void CreateBoard()
    {
        var boardSize = Configuration.Singleton.BoardSize;

        for (int y = 0; y <= boardSize * 2; y++)
        {
            var realY = y - boardSize;
            for (int x = 0; x <= boardSize + boardSize - Mathf.Abs(realY); x++)
            {
                var startX = Mathf.Max(-y, -boardSize);
                var realX  = startX + x;

                var hexTileData = new HexTileData(realX, realY, null);
                var newHex      = Instantiate(HexTilePrefab, transform);
                newHex.Init(hexTileData, null, HexTileRole.InGrid);
                newHex.transform.position = GridManagerUtils.GetHexTilePosition(hexTileData);

                _allTiles[new Vector2Int(realX, realY)] = newHex;
            }
        }

        EventManager.FireBoardIsReady();
    }
예제 #13
0
 public HexTile GetHex(HexTileData hexTileData)
 {
     return(GetHex(hexTileData.X, hexTileData.Y));
 }
예제 #14
0
 public static HexTile BuildHexTile(HexTileData hexTileData, Player owner, HexTileRole hexTileRole)
 {
     return(HexMediator.Singleton.CreateTile(hexTileData, owner, hexTileRole));
 }