using System; namespace PKHeX.Core; /// /// Group that checks the source of a move in the games that it represents. /// public interface IEvolutionGroup { /// /// Gets the previous (backward) generation group to traverse to continue processing. /// IEvolutionGroup? GetPrevious(PKM pk, EvolutionOrigin enc); /// /// Gets the next (forward) generation group to traverse to continue processing. /// IEvolutionGroup? GetNext(PKM pk, EvolutionOrigin enc); bool Append(PKM pk, EvolutionHistory history, ref ReadOnlySpan chain, EvolutionOrigin enc); EvoCriteria[] GetInitialChain(PKM pk, EvolutionOrigin enc, ushort species, byte form); } /// /// Details about the original encounter. /// /// Species the encounter originated as /// Version the encounter originated on /// Generation the encounter originated in /// Minimum level the encounter originated at /// Maximum level in final state /// Skip enforcement of legality for evolution criteria public readonly record struct EvolutionOrigin(ushort Species, byte Version, byte Generation, byte LevelMin, byte LevelMax, bool SkipChecks = false);