generatePseudoLegal method

void generatePseudoLegal(
  1. List<int> out
)

Append all pseudo-legal moves for the side to move to out.

Implementation

void generatePseudoLegal(List<int> out) {
  final us = turn, them = turn ^ 1;
  final ownOcc = occ[us];
  final enemyOcc = occ[them];
  final empty = ~occAll;

  _genPawnMoves(out, us, them, enemyOcc, empty);

  // Knights.
  var bb = pieces[us][knight];
  while (bb != 0) {
    final from = lsb(bb);
    bb &= bb - 1;
    _genFromTargets(out, from, knightAttacks[from] & ~ownOcc, enemyOcc);
  }
  // King (non-castling).
  final kSq = lsb(pieces[us][king]);
  _genFromTargets(out, kSq, kingAttacks[kSq] & ~ownOcc, enemyOcc);
  // Bishops.
  bb = pieces[us][bishop];
  while (bb != 0) {
    final from = lsb(bb);
    bb &= bb - 1;
    _genFromTargets(out, from, bishopAttacks(from, occAll) & ~ownOcc, enemyOcc);
  }
  // Rooks.
  bb = pieces[us][rook];
  while (bb != 0) {
    final from = lsb(bb);
    bb &= bb - 1;
    _genFromTargets(out, from, rookAttacks(from, occAll) & ~ownOcc, enemyOcc);
  }
  // Queens.
  bb = pieces[us][queen];
  while (bb != 0) {
    final from = lsb(bb);
    bb &= bb - 1;
    _genFromTargets(out, from, queenAttacks(from, occAll) & ~ownOcc, enemyOcc);
  }
  _genCastles(out, us, them);
}