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)); }