PKHeX/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic4Pokewalker.cs
Kurt ccf87242c1 Eliminate boxing on encounter search (criteria)
struct implementing interface is boxed when passed to method that accepts interface (not generic method).
Removes IDexLevel (no other inheritors but EvoCriteria) and uses the primitive the data is stored (array, not IReadOnlyList) for slightly better perf.
2022-05-07 18:29:36 -07:00

55 lines
1.7 KiB
C#

namespace PKHeX.Core
{
/// <summary>
/// Generation 4 Pokéwalker Encounter
/// </summary>
/// <inheritdoc cref="EncounterStatic"/>
public sealed record EncounterStatic4Pokewalker : EncounterStatic
{
public override int Generation => 4;
public EncounterStatic4Pokewalker(ushort species, sbyte gender, byte level) : base(GameVersion.HGSS)
{
Species = species;
Gender = gender;
Level = level;
Gift = true;
Location = Locations.PokeWalker4;
}
protected override bool IsMatchLocation(PKM pkm)
{
if (pkm.Format == 4)
return Location == pkm.Met_Location;
return true; // transfer location verified later
}
protected override bool IsMatchLevel(PKM pkm, EvoCriteria evo)
{
if (pkm.Format != 4) // Met Level lost on PK4=>PK5
return Level <= evo.LevelMax;
return pkm.Met_Level == Level;
}
protected override bool IsMatchPartial(PKM pkm)
{
if (Gift && pkm.Ball != Ball)
return true;
return base.IsMatchPartial(pkm);
}
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
{
var pi = pk.PersonalInfo;
int gender = criteria.GetGender(Gender, pi);
int nature = (int)criteria.GetNature(Nature.Random);
// Cannot force an ability; nature-gender-trainerID only yield fixed PIDs.
// int ability = criteria.GetAbilityFromNumber(Ability, pi);
PIDGenerator.SetRandomPIDPokewalker(pk, nature, gender);
criteria.SetRandomIVs(pk);
}
}
}