namespace PKHeX.Core;
///
/// Represents all details that an entity may be encountered with.
///
public interface IEncounterTemplate : ISpeciesForm, IVersion, IGeneration, IShiny
{
///
/// Original Context
///
EntityContext Context { get; }
///
/// Indicates if the encounter originated as an egg.
///
bool EggEncounter { get; }
///
/// Minimum level for the encounter.
///
byte LevelMin { get; }
///
/// Maximum level for the encounter.
///
byte LevelMax { get; }
}
public static partial class Extensions
{
private static bool IsWithinEncounterRange(this IEncounterTemplate encounter, int lvl)
{
return encounter.LevelMin <= lvl && lvl <= encounter.LevelMax;
}
public static bool IsWithinEncounterRange(this IEncounterTemplate encounter, PKM pk)
{
if (!pk.HasOriginalMetLocation)
return encounter.IsWithinEncounterRange(pk.CurrentLevel);
if (encounter.EggEncounter)
return pk.CurrentLevel == encounter.LevelMin;
if (encounter is MysteryGift g)
return pk.CurrentLevel == g.Level;
return pk.CurrentLevel == pk.Met_Level;
}
}