parseMoveString function

ChessMove parseMoveString(
  1. String moveString,
  2. ChessGameState state
)

Implementation

ChessMove parseMoveString(String moveString, ChessGameState state) {
  List<ChessMove> validMoves = state.moves;
  if (moveString == _LONG_CASTLE) {
    return validMoves.firstWhere((element) =>
        element.castling != Castling.none &&
        element.castling.type == CastlingType.long);
  } else if (moveString == _SHORT_CASTLE) {
    return validMoves.firstWhere((element) =>
        element.castling != Castling.none &&
        element.castling.type == CastlingType.short);
  }
  if (moveString.endsWith("+")) {
    // check, can safely delete last char
    moveString = moveString.substring(0, moveString.length - 1);
  }
  Point<int> dest = Point("abcdefgh".indexOf(moveString[moveString.length - 2]),
      "12345678".indexOf(moveString[moveString.length - 1]));
  if (moveString.length == 2) {
    return _parseSimplePawnMove(dest, validMoves);
  } else {
    if (moveString.contains("×")) {
      return _parseWithDest(moveString.substring(0, moveString.length - 3),
          true, dest, validMoves);
    } else if (moveString.contains("x")) {
      return _parseWithDest(moveString.substring(0, moveString.length - 3),
          true, dest, validMoves);
    } else {
      return _parseWithDest(moveString.substring(0, moveString.length - 2),
          false, dest, validMoves);
    }
  }
}