isLegal method

bool isLegal(
  1. Move move
)

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