private static EMoveAmbiguity Ambiguity(this Move move, BitBoard similarTypeAttacks, IPosition position) { var ambiguity = EMoveAmbiguity.None; foreach (var square in similarTypeAttacks) { var pinned = position.GetPinnedPieces(square, move.GetMovingSide()); if (similarTypeAttacks & pinned) { continue; } if (move.GetMovingPieceType() != position.GetPieceType(square)) { continue; } if (position.OccupiedBySide[move.GetMovingSide().Side] & square) { if (square.File() == move.GetFromSquare().File()) { ambiguity |= EMoveAmbiguity.File; } else if (square.Rank() == move.GetFromSquare().Rank()) { ambiguity |= EMoveAmbiguity.Rank; } ambiguity |= EMoveAmbiguity.Move; } } return(ambiguity); }