getPromoPieces method

List<int> getPromoPieces({
  1. BishopState? state,
  2. PieceType? pieceType,
  3. int? pieceIndex,
})

Implementation

List<int> getPromoPieces({
  BishopState? state,
  PieceType? pieceType,
  int? pieceIndex,
}) {
  bool checkPromoMap =
      promoMap != null && pieceType != null && pieceIndex != null;
  bool checkLimits = promoLimits != null && state != null;
  if (!checkPromoMap && !checkLimits) return promotionPieces;

  List<int> promoPieces = checkPromoMap
      ? [...promoMap![pieceIndex] ?? promotionPieces]
      : [...promotionPieces];

  if (checkLimits) {
    for (int p in promoLimits!.keys) {
      if (promoPieces.contains(p)) {
        int remaining =
            promoLimits![p]! - state.pieces[makePiece(p, state.turn)];
        if (remaining < 1) {
          promoPieces.remove(p);
        }
      }
    }
  }

  return promoPieces;
}