namespace PKHeX.Core { /// /// Stores details about a (PID) and any associated details being traced to a known correlation. /// public readonly struct PIDIV { internal static readonly PIDIV None = new(); internal static readonly PIDIV CuteCharm = new(PIDType.CuteCharm); internal static readonly PIDIV Pokewalker = new(PIDType.Pokewalker); internal static readonly PIDIV G5MGShiny = new(PIDType.G5MGShiny); /// The RNG seed which immediately generates the PIDIV (starting with PID or IVs, whichever comes first). public readonly uint OriginSeed; /// Indicates that there is no to refer to. /// Some PIDIVs may be generated without a single seed, but may follow a traceable pattern. public bool NoSeed => Type is PIDType.None or PIDType.CuteCharm or PIDType.Pokewalker or PIDType.G5MGShiny; /// Type of PIDIV correlation public readonly PIDType Type; private PIDIV(PIDType type) { OriginSeed = 0; Type = type; } public PIDIV(PIDType type, uint seed) { OriginSeed = seed; Type = type; } public bool Equals(PIDIV pid) => pid.Type == Type && pid.OriginSeed == OriginSeed; public override bool Equals(object pid) => pid is PIDIV p && Equals(p); public override int GetHashCode() => 0; public static bool operator ==(PIDIV left, PIDIV right) => left.Equals(right); public static bool operator !=(PIDIV left, PIDIV right) => !(left == right); #if DEBUG public override string ToString() => NoSeed ? Type.ToString() : $"{Type} - 0x{OriginSeed:X8}"; #endif } }