PKHeX/PKHeX.Core/Legality/LearnSource/Sources/Shared/LearnOption.cs
Kurt dcc0e79435
Evotree: Evolution Traversal Enhancements (#3936)
Like move validation, evolutions are the earliest thing we wish to traverse when determining what encounters may have originated the current Pokémon. To determine the permitted species-form-levels a Pokémon could originate with, we must devolve a Pokémon by traveling down-generation to origin. Once we have an encounter, we can then evolve it to the current species, traversing upwards from origin to the current format.
2023-07-05 21:14:09 -07:00

39 lines
1.4 KiB
C#

namespace PKHeX.Core;
/// <summary>
/// Option for checking how a move may be learned.
/// </summary>
public enum LearnOption
{
/// <summary>
/// Checks with rules assuming the move is in the current moveset.
/// </summary>
Current,
/// <summary>
/// Checks with rules assuming the move was known at any time while existing inside the game source it is being checked in.
/// </summary>
/// <remarks>
/// Only relevant for memory checks.
/// For not-transferable moves like Gen4/5 HM moves, no -- there's no point in checking them as they aren't requisites for anything.
/// Evolution criteria is handled separately.
/// </remarks>
AtAnyTime,
/// <summary>
/// Checks with rules assuming the move was taught via HOME -- for sharing acquired movesets between games.
/// </summary>
/// <remarks>
/// Relevant for HOME sharing sanity checks.
/// Required to be distinct in that the rules are different from the other two options. TR/TM flags aren't required if the move was learned via HOME.
/// </remarks>
HOME,
}
public static class LearnOptionExtensions
{
public static bool IsCurrent(this LearnOption option) => option == LearnOption.Current;
public static bool IsPast(this LearnOption option) => option is LearnOption.AtAnyTime or LearnOption.HOME;
public static bool IsFlagCheckRequired(this LearnOption option) => option != LearnOption.HOME;
}