isLegal method
Tests a move for legality.
Implementation
bool isLegal(Move move) {
switch (move) {
case NormalMove(from: final f, to: final t, promotion: final p):
if (p == Role.pawn) return false;
if (p == Role.king && this is! Antichess) return false;
if (p != null && (!board.pawns.has(f) || !SquareSet.backranks.has(t))) {
return false;
}
final legalMoves = _legalMovesOf(f);
return legalMoves.has(t) || legalMoves.has(normalizeMove(move).to);
case DropMove(to: final t, role: final r):
if (pockets == null || pockets!.of(turn, r) <= 0) {
return false;
}
if (r == Role.pawn && SquareSet.backranks.has(t)) {
return false;
}
return legalDrops.has(t);
}
}