using System;
namespace PKHeX.Core;
///
/// Indicates the requirement of the player's lead Pokémon, first sent out when starting a battle.
///
[Flags]
public enum LeadRequired
{
/// No Lead ability effect is present, or is not checked for this type of frame.
None = 0,
///
CuteCharm = 1 << 0,
///
Synchronize = 1 << 1,
// Slot Modifiers
/// or
StaticMagnet = 1 << 2,
// Level Modifiers
/// or
IntimidateKeenEye = 1 << 3,
/// or or
PressureHustleSpirit = 1 << 4,
///
SuctionCups = 1 << 5,
// Compatibility Flags
UsesLevelCall = 1 << 6,
Fail = 1 << 7,
///
CuteCharmFail = CuteCharm | Fail,
///
SynchronizeFail = Synchronize | Fail,
///
StaticMagnetFail = StaticMagnet | Fail,
///
PressureHustleSpiritFail = PressureHustleSpirit | Fail,
AllFlags = UsesLevelCall | Fail,
}
public static partial class Extensions
{
internal static bool IsLevelOrSlotModified(this LeadRequired lead) => lead.RemoveFlags() > LeadRequired.Synchronize;
internal static LeadRequired RemoveFlags(this LeadRequired lead) => lead & ~LeadRequired.AllFlags;
internal static bool NeedsLevelCall(this LeadRequired lead) => (lead & LeadRequired.UsesLevelCall) != 0;
}