using static PKHeX.Core.Species; namespace PKHeX.Core { /// <summary> /// Exposes details about the quality of a potential match compared to an input <see cref="PKM"/>. /// </summary> public interface IEncounterMatch { /// <summary> /// Checks if the implementing object's details might have been the originator of the current <see cref="pkm"/> data. /// </summary> bool IsMatchExact(PKM pkm, DexLevel dl); /// <summary> /// Checks if the potential match may not be a perfect match (might be a better match later during iteration). /// </summary> EncounterMatchRating GetMatchRating(PKM pkm); } internal static class EncounterMatchExtensions { /// <summary> /// Some species do not have a Hidden Ability, but can be altered to have the HA slot via pre-evolution. /// </summary> /// <param name="_">Match object</param> /// <param name="species">Species ID</param> /// <returns>True if it should not originate as this species.</returns> private static bool IsPartialMatchHidden(this IEncounterMatch _, int species) { return species is (int)Metapod or (int)Kakuna or (int)Pupitar or (int)Silcoon or (int)Cascoon or (int)Vibrava or (int)Flygon; } /// <summary> /// Some species do not have a Hidden Ability, but can be altered to have the HA slot via pre-evolution. /// </summary> /// <param name="_">Match object</param> /// <param name="current">Current Species ID</param> /// <param name="original">Original Species ID</param> /// <returns>True if it should not originate as this species.</returns> public static bool IsPartialMatchHidden(this IEncounterMatch _, int current, int original) { if (current == original) return false; if (!_.IsPartialMatchHidden(original)) return false; return _.IsPartialMatchHidden(current); } } }