From 1fe77c004c8cb969295c46451423676b5384d2e4 Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 11 May 2021 23:32:29 -0700 Subject: [PATCH] Cache transfer location arrays if created once --- PKHeX.Core/Game/GameStrings/MetDataSource.cs | 53 +++++++++++--------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/PKHeX.Core/Game/GameStrings/MetDataSource.cs b/PKHeX.Core/Game/GameStrings/MetDataSource.cs index 98839f475..d4f26d8a7 100644 --- a/PKHeX.Core/Game/GameStrings/MetDataSource.cs +++ b/PKHeX.Core/Game/GameStrings/MetDataSource.cs @@ -16,6 +16,9 @@ namespace PKHeX.Core private readonly List MetGen7GG; private readonly List MetGen8; + private IReadOnlyList? MetGen4Transfer; + private IReadOnlyList? MetGen5Transfer; + public MetDataSource(GameStrings s) { MetGen2 = CreateGen2(s); @@ -62,6 +65,17 @@ namespace PKHeX.Core return locations; } + private IReadOnlyList CreateGen4Transfer() + { + // Pal Park to front + var met = MetGen4.ToArray(); + var index = Array.FindIndex(met, z => z.Value == Locations.Transfer3); + var pal = met[index]; + Array.Copy(met, 0, met, 1, index); + met[0] = pal; + return met; + } + private static List CreateGen5(GameStrings s) { var locations = Util.GetCBList(s.metBW2_00000, 0); @@ -74,6 +88,17 @@ namespace PKHeX.Core return locations; } + private IReadOnlyList CreateGen5Transfer() + { + // PokéTransfer to front + var met = MetGen5.ToArray(); + var index = Array.FindIndex(met, z => z.Value == Locations.Transfer4); + var xfr = met[index]; + Array.Copy(met, 0, met, 1, index); + met[0] = xfr; + return met; + } + private static List CreateGen6(GameStrings s) { var locations = Util.GetCBList(s.metXY_00000, 0); @@ -199,29 +224,11 @@ namespace PKHeX.Core /// Origin version /// Current save file generation /// Met location list - private IReadOnlyList GetLocationListModified(GameVersion version, int currentGen) + private IReadOnlyList GetLocationListModified(GameVersion version, int currentGen) => version switch { - if (version <= CXD && currentGen == 4) // Pal Park to front - { - var met = MetGen4.ToArray(); - var index = Array.FindIndex(met, z => z.Value == Locations.Transfer3); - var pal = met[index]; - Array.Copy(met, 0, met, 1, index); - met[0] = pal; - return met; - } - - if (version < X && currentGen >= 5) // PokéTransfer to front - { - var met = MetGen5.ToArray(); - var index = Array.FindIndex(met, z => z.Value == Locations.Transfer4); - var xfr = met[index]; - Array.Copy(met, 0, met, 1, index); - met[0] = xfr; - return met; - } - - return Array.Empty(); - } + <= CXD when currentGen == 4 => MetGen4Transfer ??= CreateGen4Transfer(), + < X when currentGen >= 5 => MetGen5Transfer ??= CreateGen5Transfer(), + _ => Array.Empty() + }; } }