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