using System; namespace PKHeX.Core; using static LearnEnvironment; using static EntityContext; /// /// Indicates the group of game(s) that the move was learned in. /// /// /// Each unique set of learnsets has a unique value. /// public enum LearnEnvironment : byte { /// /// Sentinel value indicating no environment specified/initial environment. /// None, /* Gen1 */ RB, YW, /* Gen2 */ GS, C, Stadium2, /* Gen3 */ RS, E, FR, LG, /* Gen4 */ DP, Pt, HGSS, /* Gen5 */ BW, B2W2, /* Gen6 */ XY, ORAS, /* Gen7 */ SM, USUM, GG, /* Gen8 */ SWSH, BDSP, PLA, /* Gen9 */ SV, ZA, HOME, } /// /// Extension methods for . /// public static class LearnEnvironmentExtensions { extension(LearnEnvironment value) { /// /// Indicates whether the is specified (not ), and thus worth indicating. /// public bool IsSpecified => value is not LearnEnvironment.None; /// /// Gets the generation number [1-n] for the given . /// public byte Generation => value switch { RB or YW => 1, GS or C or Stadium2 => 2, RS or E or FR or LG => 3, DP or Pt or HGSS => 4, BW or B2W2 => 5, XY or ORAS => 6, SM or USUM or GG => 7, SWSH or BDSP or PLA => 8, SV or ZA => 9, _ => 0, }; public EntityContext Context => value switch { RB or YW => Gen1, GS or C or Stadium2 => Gen2, RS or E or FR or LG => Gen3, DP or Pt or HGSS => Gen4, BW or B2W2 => Gen5, XY or ORAS => Gen6, SM or USUM => Gen7, GG => Gen7b, SWSH => Gen8, PLA => Gen8a, BDSP => Gen8b, SV => Gen9, ZA => Gen9a, _ => 0, }; /// /// Retrieves the evolution criteria for the given from the provided . /// public ReadOnlySpan GetEvolutions(EvolutionHistory history) => value switch { RB or YW => history.Gen1, GS or C or Stadium2 => history.Gen2, RS or E or FR or LG => history.Gen3, DP or Pt or HGSS => history.Gen4, BW or B2W2 => history.Gen5, XY or ORAS => history.Gen6, SM or USUM => history.Gen7, GG => history.Gen7b, SWSH => history.Gen8, PLA => history.Gen8a, BDSP => history.Gen8b, SV => history.Gen9, ZA => history.Gen9a, _ => [], }; } }