mirror of
https://github.com/kwsch/PKHeX
synced 2024-12-22 02:13:10 +00:00
6441bdadd8
`Moveset` struct stores 4 moves, and exposes methods to interact with a moveset. `IndividualValueSet` stores a 6 IV template (signed). Performance impact: * Less allocating on the heap: Moves - (8 bytes member ptr, 20 bytes heap->8 bytes member) * Less allocating on the heap: IVs - (8 bytes member ptr, 28 bytes heap->8 bytes member) * No heap pointers, no need to jump to grab data. * Easy to inline logic for checking if moves are present (no linq usage with temporary collections). End result is faster ctor times, less memory used, faster program.
56 lines
1.8 KiB
C#
56 lines
1.8 KiB
C#
namespace PKHeX.Core;
|
|
|
|
/// <summary>
|
|
/// Generation 8 Trade Encounter
|
|
/// </summary>
|
|
/// <inheritdoc cref="EncounterTrade"/>
|
|
public sealed record EncounterTrade8 : EncounterTrade, IDynamaxLevel, IRelearn, IMemoryOT
|
|
{
|
|
public override int Generation => 8;
|
|
public override EntityContext Context => EntityContext.Gen8;
|
|
public override int Location => Locations.LinkTrade6NPC;
|
|
public Moveset Relearn { get; init; }
|
|
|
|
public ushort OT_TextVar { get; set; }
|
|
public byte OT_Memory { get; set; }
|
|
public byte OT_Feeling { get; set; }
|
|
public byte OT_Intensity { get; set; }
|
|
public byte DynamaxLevel { get; set; }
|
|
public byte FlawlessIVCount { get; init; }
|
|
public override Shiny Shiny { get; }
|
|
|
|
public EncounterTrade8(GameVersion game, int species, byte level, byte memory, ushort arg, byte feel, byte intensity, Shiny shiny = Shiny.Never) : base(game)
|
|
{
|
|
Species = species;
|
|
Level = level;
|
|
Shiny = shiny;
|
|
|
|
OT_Memory = memory;
|
|
OT_TextVar = arg;
|
|
OT_Feeling = feel;
|
|
OT_Intensity = intensity;
|
|
}
|
|
|
|
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
|
{
|
|
if (pk is PK8 d && d.DynamaxLevel < DynamaxLevel)
|
|
return false;
|
|
if (pk.FlawlessIVCount < FlawlessIVCount)
|
|
return false;
|
|
return base.IsMatchExact(pk, evo);
|
|
}
|
|
|
|
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
|
{
|
|
base.ApplyDetails(sav, criteria, pk);
|
|
pk.SetRelearnMoves(Relearn);
|
|
|
|
var pk8 = (PK8)pk;
|
|
pk8.DynamaxLevel = DynamaxLevel;
|
|
pk8.HT_Language = (byte)sav.Language;
|
|
pk8.OT_Memory = OT_Memory;
|
|
pk8.OT_TextVar = OT_TextVar;
|
|
pk8.OT_Feeling = OT_Feeling;
|
|
pk8.OT_Intensity = OT_Intensity;
|
|
}
|
|
}
|