pieceType method

PieceType pieceType(
  1. int piece, [
  2. int? square
])

Implementation

PieceType pieceType(int piece, [int? square]) {
  // TODO: make this more efficient by building some of these values in advance
  final pd = pieces[piece.type];
  if (square == null ||
      !hasRegions ||
      pd.type.regionEffects.isEmpty ||
      !boardSize.onBoard(square)) {
    return pd.type;
  }
  List<RegionEffect> effects = pd.type.changePieceRegionEffects;
  if (effects.isEmpty) {
    return pd.type;
  }
  List<String> matchedRegions = [];
  for (final region in regions.entries) {
    if (boardSize.inRegion(square, region.value)) {
      matchedRegions.add(region.key);
    }
  }
  for (RegionEffect re in effects) {
    if (matchedRegions.contains(
      piece.colour == Bishop.white ? re.whiteRegion : re.blackRegion,
    )) {
      return re.pieceType!;
    }
  }
  return pd.type;
}