Example #1
0
        private OperationResult <StateInfo> getStateInfo(GameState gameState, int piecePosition, int newPiecePosition, PieceType?piecePromotionType)
        {
            var square = gameState.Squares.GetSquare(piecePosition);

            if (!square.Occupied)
            {
                return(OperationResult <StateInfo> .Fail("Square was empty."));
            }
            if (square.Piece.Color != gameState.ActiveColor)
            {
                return(OperationResult <StateInfo> .Fail("Wrong team."));
            }
            var moveInfoResult = _moveService.GetStateInfo(gameState, piecePosition, newPiecePosition);

            if (moveInfoResult.Failure)
            {
                return(OperationResult <StateInfo> .Fail(moveInfoResult.Message));
            }
            var moveInfo = moveInfoResult.Result;

            if (moveInfo.IsPawnPromotion)
            {
                if (!piecePromotionType.HasValue)
                {
                    return(OperationResult <StateInfo> .Fail("Must provide pawn promotion piece type in order to promote a pawn."));
                }
                moveInfo.PawnPromotedTo = piecePromotionType.Value;
            }
            //var putsOwnKingInCheck = false;
            if (moveInfo.IsCheck)
            {
                return(OperationResult <StateInfo> .Fail("Must move out of check. Must not move into check."));
            }
            return(OperationResult <StateInfo> .Ok(moveInfo));
        }