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