예제 #1
0
        private void CenterCameraOnBoard()
        {
            Transform cameraTransform = mainCamera.transform;
            Vector3   boardPosition   = boardGameObject.position;

            cameraTransform.position = new Vector3(boardPosition.x, boardPosition.y, cameraTransform.position.z);
            mainCamera.transform.LookAt(boardGameObject, Vector3.forward);

            int boardSizeY = (int)_boardCreator.BoardSize.y;

            Tile.Tile t            = _boardCreator.MiddleTile;
            Rect      tileRect     = t.GetComponent <RectTransform>().rect;
            Vector3   tilePos      = t.transform.position;
            float     newBoardPosX = tilePos.x;
            float     newBoardPosY = tilePos.y + (boardSizeY % 2 == 0 ? tileRect.height / 2 : 0);

            boardGameObject.position = new Vector3(-newBoardPosX, -newBoardPosY, boardPosition.z);

            int fov         = (int)fovForHeight.x;
            int boardHeight = (int)fovForHeight.y;
            int newFov      = fov - (fov - boardSizeY * fov / boardHeight) / 2;

            mainCamera.fieldOfView = newFov + fovGap;

            _boardCreator.RemoveMiddleTile();

            backgroundAdjuster.AdjustBackground();
        }
예제 #2
0
        private Vector2 GetTilePosition(Vector3 index, TileTypes type = TileTypes.Single)
        {
            index.ToInts(out int x, out int y, out int floor);
            Rect    tileRect = tileGameObject.GetComponent <RectTransform>().rect;
            Vector3 boardPos = boardGameObject.position;

            float xPos;
            float yPos;

            switch (type)
            {
            case TileTypes.DoubleH:
                bool shouldShiftX = ShouldShiftTileX(index, out Tile bottomTile);
                xPos = boardPos.x + tileRect.width * x + tileRect.width / 2 -
                       (shouldShiftX ? tileShift * (int)bottomTile.Index.z : 0);
                bool shouldShiftY = ShouldShiftTileY(index);
                yPos = boardPos.y - tileRect.height * y + tileShift * y -
                       (shouldShiftY ? tileRect.height / 2 : 0);
                break;

            case TileTypes.DoubleV:
                xPos = boardPos.x + tileRect.width * x - tileShift * floor;
                yPos = boardPos.y - tileRect.height * y - tileRect.height / 2 + tileShift * y;
                break;

            default:
                xPos = boardPos.x + tileRect.width * x - tileShift * floor;
                yPos = boardPos.y - tileRect.height * y + tileShift * y;
                break;
            }

            return(new Vector2(xPos, yPos));
        }