generatePlayerMoves method

List<Move> generatePlayerMoves(
  1. int player, [
  2. MoveGenParams? params
])

Generates all moves for the specified player. See MoveGenParams for possibilities.

Implementation

List<Move> generatePlayerMoves(int player, [MoveGenParams? params]) {
  params ??= MoveGenParams.normal;
  List<Move> moves = [];
  for (int i = 0; i < board.length; i++) {
    Square target = board[i];
    if (target.isNotEmpty &&
        (target.colour == player || target.colour == Bishop.neutralPassive)) {
      List<Move> pieceMoves = generatePieceMoves(i, params);
      moves.addAll(pieceMoves);
      if (params.onlyOne && moves.isNotEmpty) return moves;
    }
  }
  if (variant.handsEnabled && params.quiet && !params.onlyPiece) {
    moves.addAll(generateDrops(player));
  }
  if (variant.hasMoveGenerators) {
    moves.addAll(
      variant.generateCustomMoves(
        state: state,
        player: player,
        params: params,
      ),
    );
  }
  if (variant.hasPass && params.quiet) {
    final pass = generatePass(player);
    if (pass != null) moves.insert(0, pass);
  }
  if (variant.forcedCapture != null && !params.ignorePieces) {
    final captures = moves.captures;
    if (captures.isNotEmpty) {
      return captures;
    }
  }
  return moves;
}