generateLegal method
Legal moves: pseudo-legal filtered by making each and rejecting those that leave our king in check.
Implementation
List<int> generateLegal() {
final pseudo = <int>[];
generatePseudoLegal(pseudo);
final legal = <int>[];
for (final m in pseudo) {
makeMove(m);
// After makeMove, turn flipped; our king is the side that just moved.
if (!isSquareAttacked(_kingSquareOf(turn ^ 1), turn)) {
legal.add(m);
}
unmakeMove();
}
return legal;
}