Replace some linq usage with direct logic

This commit is contained in:
Kurt 2021-05-06 23:26:38 -07:00
parent fa5bc0d634
commit 31142ee297
19 changed files with 124 additions and 73 deletions

View file

@ -24,7 +24,7 @@ namespace PKHeX.Core
if (pk.Format <= 3) if (pk.Format <= 3)
return; // no markings (gen3 only has 4; can't mark stats intelligently return; // no markings (gen3 only has 4; can't mark stats intelligently
var markings = ivs.Select(MarkingMethod(pk)).ToArray(); var markings = ivs.Select(MarkingMethod(pk)).ToArray(); // future: stackalloc
pk.Markings = PKX.ReorderSpeedLast(markings); pk.Markings = PKX.ReorderSpeedLast(markings);
} }

View file

@ -107,16 +107,24 @@ namespace PKHeX.Core
private static int[]? GetSuggestedHiddenPowerIVs(int hpVal, int[] IVs) private static int[]? GetSuggestedHiddenPowerIVs(int hpVal, int[] IVs)
{ {
var flawless = IVs.Select((v, i) => v == 31 ? i : -1).Where(v => v != -1).ToArray(); const int max = 31;
var permutations = GetPermutations(flawless, flawless.Length); var flawless = new int[IVs.Length]; // future: stackalloc
int flawedCount = 0; int flawlessCount = 0;
int[]? best = null; for (int i = 0; i < IVs.Length; i++)
{
if (IVs[i] == max)
flawless[++flawlessCount] = i;
}
var permutations = GetPermutations(flawless, flawlessCount);
int flawedCount = 0; // result tracking
int[]? best = null; // result tracking
int[] ivs = (int[])IVs.Clone(); int[] ivs = (int[])IVs.Clone();
foreach (var permute in permutations) foreach (var permute in permutations)
{ {
foreach (var item in permute) foreach (var index in permute)
{ {
ivs[item] ^= 1; ivs[index] ^= 1;
if (hpVal != GetType(ivs)) if (hpVal != GetType(ivs))
continue; continue;
@ -129,7 +137,7 @@ namespace PKHeX.Core
break; // any further flaws are always worse break; // any further flaws are always worse
} }
// Restore IVs for another iteration // Restore IVs for another iteration
Array.Copy(IVs, 0, ivs, 0, ivs.Length); Buffer.BlockCopy(IVs, 0, ivs, 0, ivs.Length);
} }
return best; return best;
} }

View file

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace PKHeX.Core namespace PKHeX.Core
@ -25,7 +26,7 @@ namespace PKHeX.Core
public string Move2 => Get(Strings.movelist, pkm.Move2); public string Move2 => Get(Strings.movelist, pkm.Move2);
public string Move3 => Get(Strings.movelist, pkm.Move3); public string Move3 => Get(Strings.movelist, pkm.Move3);
public string Move4 => Get(Strings.movelist, pkm.Move4); public string Move4 => Get(Strings.movelist, pkm.Move4);
public string HeldItem => Get(Strings.GetItemStrings(pkm.Format), pkm.HeldItem); public string HeldItem => GetSpan(Strings.GetItemStrings(pkm.Format), pkm.HeldItem);
public string HP => Stats[0].ToString(); public string HP => Stats[0].ToString();
public string ATK => Stats[1].ToString(); public string ATK => Stats[1].ToString();
public string DEF => Stats[2].ToString(); public string DEF => Stats[2].ToString();
@ -121,5 +122,6 @@ namespace PKHeX.Core
/// <param name="val">Index to fetch</param> /// <param name="val">Index to fetch</param>
/// <returns>Null if array is null</returns> /// <returns>Null if array is null</returns>
private static string Get(IReadOnlyList<string> arr, int val) => (uint)val < arr.Count ? arr[val] : string.Empty; private static string Get(IReadOnlyList<string> arr, int val) => (uint)val < arr.Count ? arr[val] : string.Empty;
private static string GetSpan(ReadOnlySpan<string> arr, int val) => (uint)val < arr.Length ? arr[val] : string.Empty;
} }
} }

View file

@ -123,19 +123,9 @@ namespace PKHeX.Core
return Array.Empty<string>(); return Array.Empty<string>();
var ew = ((SAV7b)S1).Blocks.EventWork; var ew = ((SAV7b)S1).Blocks.EventWork;
var fOn = SetFlags.Select(z => new { Type = ew.GetFlagType(z, out var subIndex), Index = subIndex, Raw = z }) var fOn = SetFlags.Select(z => new FlagSummary(z, ew).ToString());
.Select(z => $"{z.Raw:0000}\t{true }\t{z.Index:0000}\t{z.Type}").ToArray(); var fOff = ClearedFlags.Select(z => new FlagSummary(z, ew).ToString());
var fOff = ClearedFlags.Select(z => new { Type = ew.GetFlagType(z, out var subIndex), Index = subIndex, Raw = z }) var wt = WorkChanged.Select((z, i) => new WorkSummary(z, ew, WorkDiff[i]).ToString());
.Select(z => $"{z.Raw:0000}\t{false}\t{z.Index:0000}\t{z.Type}").ToArray();
var w = WorkChanged.Select((z, i) => new
{
Type = ew.GetWorkType(z, out var subIndex),
Index = subIndex,
Raw = z,
Text = WorkDiff[i]
}).ToArray();
var wt = w.Select(z => $"{z.Raw:000}\t{z.Text}\t{z.Index:000}\t{z.Type}").ToArray();
var list = new List<string> { "Flags: ON", "=========" }; var list = new List<string> { "Flags: ON", "=========" };
list.AddRange(fOn); list.AddRange(fOn);
@ -158,5 +148,39 @@ namespace PKHeX.Core
return list; return list;
} }
private readonly struct FlagSummary
{
private EventVarType Type { get; }
private int Index { get; }
private int Raw { get; }
public override string ToString() => $"{Raw:0000}\t{false}\t{Index:0000}\t{Type}";
public FlagSummary(int rawIndex, EventWork7b ew)
{
Type = ew.GetFlagType(rawIndex, out var subIndex);
Index = subIndex;
Raw = rawIndex;
}
}
private readonly struct WorkSummary
{
private EventVarType Type { get; }
private int Index { get; }
private int Raw { get; }
private string Text { get; }
public override string ToString() => $"{Raw:000}\t{Text}\t{Index:000}\t{Type}";
public WorkSummary(int rawIndex, EventWork7b ew, string text)
{
Type = ew.GetFlagType(rawIndex, out var subIndex);
Index = subIndex;
Raw = rawIndex;
Text = text;
}
}
} }
} }

View file

@ -273,7 +273,7 @@ namespace PKHeX.Core
if (HeldItem > 0) if (HeldItem > 0)
{ {
var items = Strings.GetItemStrings(Format); var items = Strings.GetItemStrings(Format);
if ((uint)HeldItem < items.Count) if ((uint)HeldItem < items.Length)
result += $" @ {items[HeldItem]}"; result += $" @ {items[HeldItem]}";
} }
return result; return result;
@ -384,7 +384,7 @@ namespace PKHeX.Core
bool TrySetItem(int format) bool TrySetItem(int format)
{ {
var items = (string[])Strings.GetItemStrings(format); // IReadOnlyList<string>->string[] must be possible for the provided strings var items = Strings.GetItemStrings(format);
int item = StringUtil.FindIndexIgnoreCase(items, itemName); int item = StringUtil.FindIndexIgnoreCase(items, itemName);
if (item < 0) if (item < 0)
return false; return false;

View file

@ -384,18 +384,15 @@ namespace PKHeX.Core
// metSWSH_30000[17] += " (-)"; // Pokémon HOME -- duplicate with 40000's entry // metSWSH_30000[17] += " (-)"; // Pokémon HOME -- duplicate with 40000's entry
} }
public IReadOnlyList<string> GetItemStrings(int generation, GameVersion game = GameVersion.Any) public string[] GetItemStrings(int generation, GameVersion game = GameVersion.Any) => generation switch
{ {
return generation switch 0 => Array.Empty<string>(),
{ 1 => g1items,
0 => Array.Empty<string>(), 2 => g2items,
1 => g1items, 3 => GetItemStrings3(game),
2 => g2items, 4 => g4items, // mail names changed 4->5
3 => GetItemStrings3(game), _ => itemlist
4 => g4items, // mail names changed 4->5 };
_ => itemlist
};
}
private string[] GetItemStrings3(GameVersion game) private string[] GetItemStrings3(GameVersion game)
{ {

View file

@ -32,21 +32,23 @@ namespace PKHeX.Core
private static List<ComboItem> CreateGen2(GameStrings s) private static List<ComboItem> CreateGen2(GameStrings s)
{ {
var locations = Util.GetCBList(s.metGSC_00000, Enumerable.Range(0, 0x5F).ToArray()); var locations = Util.GetCBList(s.metGSC_00000.AsSpan(0, 0x5F));
Util.AddCBWithOffset(locations, s.metGSC_00000, 00000, 0x7E, 0x7F); Util.AddCBWithOffset(locations, s.metGSC_00000.AsSpan(0x7E, 2), 0x7E);
return locations; return locations;
} }
private static List<ComboItem> CreateGen3(GameStrings s) private static List<ComboItem> CreateGen3(GameStrings s)
{ {
var locations = Util.GetCBList(s.metRSEFRLG_00000, Enumerable.Range(0, 213).ToArray()); var locations = Util.GetCBList(s.metRSEFRLG_00000.AsSpan(0, 213));
Util.AddCBWithOffset(locations, s.metRSEFRLG_00000, 00000, 253, 254, 255); Util.AddCBWithOffset(locations, s.metRSEFRLG_00000.AsSpan(253, 3), 253);
return locations; return locations;
} }
private static List<ComboItem> CreateGen3CXD(GameStrings s) private static List<ComboItem> CreateGen3CXD(GameStrings s)
{ {
return Util.GetCBList(s.metCXD_00000, Enumerable.Range(0, s.metCXD_00000.Length).ToArray()).Where(c => c.Text.Length > 0).ToList(); var list = Util.GetCBList(s.metCXD_00000);
list.RemoveAll(z => z.Text.Length == 0);
return list;
} }
private static List<ComboItem> CreateGen4(GameStrings s) private static List<ComboItem> CreateGen4(GameStrings s)

View file

@ -1,4 +1,4 @@
using System.Linq; using System;
using static PKHeX.Core.EncounterUtil; using static PKHeX.Core.EncounterUtil;
using static PKHeX.Core.GameVersion; using static PKHeX.Core.GameVersion;
using static PKHeX.Core.EncounterGBLanguage; using static PKHeX.Core.EncounterGBLanguage;
@ -103,9 +103,9 @@ namespace PKHeX.Core
new EncounterStatic2Roam(245, 40, GS), // Suicune new EncounterStatic2Roam(245, 40, GS), // Suicune
}; };
private static readonly EncounterStatic2[] Encounter_GS = Encounter_GSC_Common.Concat(Encounter_GS_Exclusive).Concat(Encounter_GSC_Roam).ToArray(); private static readonly EncounterStatic2[] Encounter_GS = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_GS_Exclusive, Encounter_GSC_Roam);
private static readonly EncounterStatic2[] Encounter_C = Encounter_GSC_Common.Concat(Encounter_C_Exclusive).Concat(Encounter_GSC_Roam.Slice(0, 2)).ToArray(); private static readonly EncounterStatic2[] Encounter_C = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_C_Exclusive, Encounter_GSC_Roam.AsSpan(0, 2));
private static readonly EncounterStatic2[] Encounter_GSC = Encounter_GSC_Common.Concat(Encounter_GS_Exclusive).Concat(Encounter_C_Exclusive).Concat(Encounter_GSC_Roam).ToArray(); private static readonly EncounterStatic2[] Encounter_GSC = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_GS_Exclusive, Encounter_C_Exclusive, Encounter_GSC_Roam);
internal static readonly EncounterTrade2[] TradeGift_GSC = internal static readonly EncounterTrade2[] TradeGift_GSC =
{ {

View file

@ -1,5 +1,4 @@
using System.Linq; using static PKHeX.Core.EncounterUtil;
using static PKHeX.Core.EncounterUtil;
using static PKHeX.Core.GameVersion; using static PKHeX.Core.GameVersion;
namespace PKHeX.Core namespace PKHeX.Core
@ -396,13 +395,15 @@ namespace PKHeX.Core
new EncounterTrade4RanchSpecial(489, 01) { Moves = new[] {447,240,156,057}, TID = 1000, SID = 09248, OTGender = 1, Location = 3000, Ball = 0x10, Gender = 2, CurrentLevel = 50, EggLocation = 3000, }, // Phione new EncounterTrade4RanchSpecial(489, 01) { Moves = new[] {447,240,156,057}, TID = 1000, SID = 09248, OTGender = 1, Location = 3000, Ball = 0x10, Gender = 2, CurrentLevel = 50, EggLocation = 3000, }, // Phione
}; };
internal static readonly EncounterTrade4[] TradeGift_DPPt = new EncounterTrade4PID[] private static readonly EncounterTrade4PID[] TradeGift_DPPtIngame =
{ {
new(DPPt, 0x0000008E, 063, 01) { Ability = 1, TID = 25643, SID = 00000, OTGender = 1, Gender = 0, IVs = new[] {15,15,15,20,25,25} }, // Machop -> Abra new(DPPt, 0x0000008E, 063, 01) { Ability = 1, TID = 25643, SID = 00000, OTGender = 1, Gender = 0, IVs = new[] {15,15,15,20,25,25} }, // Machop -> Abra
new(DPPt, 0x00000867, 441, 01) { Ability = 2, TID = 44142, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,20,15,25,25,15}, Contest = 20 }, // Buizel -> Chatot new(DPPt, 0x00000867, 441, 01) { Ability = 2, TID = 44142, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,20,15,25,25,15}, Contest = 20 }, // Buizel -> Chatot
new(DPPt, 0x00000088, 093, 35) { Ability = 1, TID = 19248, SID = 00000, OTGender = 1, Gender = 0, IVs = new[] {20,25,15,25,15,15} }, // Medicham (35 from Route 217) -> Haunter new(DPPt, 0x00000088, 093, 35) { Ability = 1, TID = 19248, SID = 00000, OTGender = 1, Gender = 0, IVs = new[] {20,25,15,25,15,15} }, // Medicham (35 from Route 217) -> Haunter
new(DPPt, 0x0000045C, 129, 01) { Ability = 1, TID = 53277, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,25,15,20,25,15} }, // Finneon -> Magikarp new(DPPt, 0x0000045C, 129, 01) { Ability = 1, TID = 53277, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,25,15,20,25,15} }, // Finneon -> Magikarp
}.Concat(RanchGifts).ToArray(); };
internal static readonly EncounterTrade4[] TradeGift_DPPt = ArrayUtil.ConcatAll(TradeGift_DPPtIngame, RanchGifts);
internal static readonly EncounterTrade4PID[] TradeGift_HGSS = internal static readonly EncounterTrade4PID[] TradeGift_HGSS =
{ {

View file

@ -4,7 +4,6 @@ using static PKHeX.Core.GameVersion;
using static PKHeX.Core.AreaWeather8; using static PKHeX.Core.AreaWeather8;
using static PKHeX.Core.Encounters8Nest; using static PKHeX.Core.Encounters8Nest;
using System.Linq;
namespace PKHeX.Core namespace PKHeX.Core
{ {
@ -790,7 +789,7 @@ namespace PKHeX.Core
new(SWSH, 105,15,01,038,06,2) { TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, Shiny = Shiny.Random, IsNicknamed = false, Relearn = new[] {174,000,000,000}, Form = 1 }, // Marowak-1 new(SWSH, 105,15,01,038,06,2) { TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, Shiny = Shiny.Random, IsNicknamed = false, Relearn = new[] {174,000,000,000}, Form = 1 }, // Marowak-1
}; };
internal static readonly EncounterTrade8[] TradeGift_SWSH = TradeGift_Regular.Concat(TradeGift_R1).ToArray(); internal static readonly EncounterTrade8[] TradeGift_SWSH = ArrayUtil.ConcatAll(TradeGift_Regular, TradeGift_R1);
internal static readonly EncounterStatic[] StaticSW = ArrayUtil.ConcatAll<EncounterStatic>(Nest_Common, Nest_SW, Nest_SH, Dist_DLC2, Dist_DLC1, Dist_Base, GetEncounters(Crystal_SWSH, SW), DynAdv_SWSH, GetEncounters(Encounter_SWSH, SW)); internal static readonly EncounterStatic[] StaticSW = ArrayUtil.ConcatAll<EncounterStatic>(Nest_Common, Nest_SW, Nest_SH, Dist_DLC2, Dist_DLC1, Dist_Base, GetEncounters(Crystal_SWSH, SW), DynAdv_SWSH, GetEncounters(Encounter_SWSH, SW));
internal static readonly EncounterStatic[] StaticSH = ArrayUtil.ConcatAll<EncounterStatic>(Nest_Common, Nest_SW, Nest_SH, Dist_DLC2, Dist_DLC1, Dist_Base, GetEncounters(Crystal_SWSH, SH), DynAdv_SWSH, GetEncounters(Encounter_SWSH, SH)); internal static readonly EncounterStatic[] StaticSH = ArrayUtil.ConcatAll<EncounterStatic>(Nest_Common, Nest_SW, Nest_SH, Dist_DLC2, Dist_DLC1, Dist_Base, GetEncounters(Crystal_SWSH, SH), DynAdv_SWSH, GetEncounters(Encounter_SWSH, SH));

View file

@ -1,5 +1,4 @@
using System.Linq; using static PKHeX.Core.Encounters8Nest;
using static PKHeX.Core.Encounters8Nest;
namespace PKHeX.Core namespace PKHeX.Core
{ {

View file

@ -49,7 +49,7 @@ namespace PKHeX.Core
if (pkm.HeldItem > 0) if (pkm.HeldItem > 0)
{ {
var items = s.GetItemStrings(pkm.Format); var items = s.GetItemStrings(pkm.Format);
if ((uint)pkm.HeldItem < items.Count) if ((uint)pkm.HeldItem < items.Length)
yield return $" @ {items[pkm.HeldItem]}"; yield return $" @ {items[pkm.HeldItem]}";
} }

View file

@ -470,7 +470,7 @@ namespace PKHeX.Core
new InventoryPouchGB(InventoryType.Items, LegalItems, 99, Offsets.PouchItem, 20), new InventoryPouchGB(InventoryType.Items, LegalItems, 99, Offsets.PouchItem, 20),
new InventoryPouchGB(InventoryType.KeyItems, LegalKeyItems, 99, Offsets.PouchKey, 26), new InventoryPouchGB(InventoryType.KeyItems, LegalKeyItems, 99, Offsets.PouchKey, 26),
new InventoryPouchGB(InventoryType.Balls, LegalBalls, 99, Offsets.PouchBall, 12), new InventoryPouchGB(InventoryType.Balls, LegalBalls, 99, Offsets.PouchBall, 12),
new InventoryPouchGB(InventoryType.PCItems, LegalItems.Concat(LegalKeyItems).Concat(LegalBalls).Concat(LegalTMHMs).ToArray(), 99, Offsets.PouchPC, 50) new InventoryPouchGB(InventoryType.PCItems, ArrayUtil.ConcatAll(LegalItems, LegalKeyItems, LegalBalls, LegalTMHMs), 99, Offsets.PouchPC, 50)
}; };
return pouch.LoadAll(Data); return pouch.LoadAll(Data);
} }

View file

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace PKHeX.Core namespace PKHeX.Core
{ {
@ -135,7 +134,8 @@ namespace PKHeX.Core
public override string GetDaycareRNGSeed(int loc) public override string GetDaycareRNGSeed(int loc)
{ {
int ofs = loc == 0 ? DaycareOffset : Daycare2; int ofs = loc == 0 ? DaycareOffset : Daycare2;
var data = Data.Skip(ofs + 0x1E8).Take(DaycareSeedSize / 2).Reverse().ToArray(); var data = Data.AsSpan(ofs + 0x1E8, DaycareSeedSize / 2).ToArray();
Array.Reverse(data);
return BitConverter.ToString(data).Replace("-", string.Empty); return BitConverter.ToString(data).Replace("-", string.Empty);
} }

View file

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace PKHeX.Core namespace PKHeX.Core
{ {
@ -100,7 +99,8 @@ namespace PKHeX.Core
public override string GetDaycareRNGSeed(int loc) public override string GetDaycareRNGSeed(int loc)
{ {
int ofs = DaycareOffset; int ofs = DaycareOffset;
var data = Data.Skip(ofs + 0x1E8).Take(DaycareSeedSize / 2).Reverse().ToArray(); var data = Data.AsSpan(ofs + 0x1E8, DaycareSeedSize / 2).ToArray();
Array.Reverse(data);
return BitConverter.ToString(data).Replace("-", string.Empty); return BitConverter.ToString(data).Replace("-", string.Empty);
} }

View file

@ -1,5 +1,4 @@
using System; using System;
using System.Linq;
namespace PKHeX.Core namespace PKHeX.Core
{ {
@ -37,7 +36,8 @@ namespace PKHeX.Core
{ {
if (value.Length == 0) if (value.Length == 0)
{ {
Enumerable.Repeat<byte>(0xFF, 8).ToArray().CopyTo(Data, 0x12); for (int i = 0; i < 8; i++)
Data[0x12 + i] = 0xFF;
} }
else else
{ {

View file

@ -37,7 +37,7 @@ namespace PKHeX.Core
if (msg != null) if (msg != null)
{ {
var itemstr = GameInfo.Strings.GetItemStrings(pkm.Format, (GameVersion)pkm.Version); var itemstr = GameInfo.Strings.GetItemStrings(pkm.Format, (GameVersion)pkm.Version);
errata.Add($"{msg} {(held >= itemstr.Count ? held.ToString() : itemstr[held])}"); errata.Add($"{msg} {(held >= itemstr.Length ? held.ToString() : itemstr[held])}");
} }
} }

View file

@ -203,5 +203,15 @@ namespace PKHeX.Core
arr3.CopyTo(result, arr1.Length + arr2.Length); arr3.CopyTo(result, arr1.Length + arr2.Length);
return result; return result;
} }
internal static T[] ConcatAll<T>(T[] arr1, T[] arr2, Span<T> arr3)
{
int len = arr1.Length + arr2.Length + arr3.Length;
var result = new T[len];
arr1.CopyTo(result, 0);
arr2.CopyTo(result, arr1.Length);
arr3.CopyTo(result.AsSpan(arr1.Length + arr2.Length));
return result;
}
} }
} }

View file

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace PKHeX.Core namespace PKHeX.Core
{ {
@ -43,10 +42,10 @@ namespace PKHeX.Core
return arr; return arr;
} }
public static List<ComboItem> GetCBList(IReadOnlyList<string> inStrings) public static List<ComboItem> GetCBList(ReadOnlySpan<string> inStrings)
{ {
var list = new List<ComboItem>(inStrings.Count); var list = new List<ComboItem>(inStrings.Length);
for (int i = 0; i < inStrings.Count; i++) for (int i = 0; i < inStrings.Length; i++)
list.Add(new ComboItem(inStrings[i], i)); list.Add(new ComboItem(inStrings[i], i));
list.Sort(Comparer); list.Sort(Comparer);
return list; return list;
@ -82,12 +81,10 @@ namespace PKHeX.Core
return list; return list;
} }
public static List<ComboItem> GetCBList(IReadOnlyList<string> inStrings, params int[][] allowed) public static List<ComboItem> GetCBList(IReadOnlyList<string> inStrings, int[] allowed)
{ {
var count = allowed.Sum(z => z.Length); var list = new List<ComboItem>(allowed.Length);
var list = new List<ComboItem>(count); AddCB(list, inStrings, allowed);
foreach (var arr in allowed)
AddCB(list, inStrings, arr);
return list; return list;
} }
@ -97,7 +94,7 @@ namespace PKHeX.Core
list.Add(item); list.Add(item);
} }
public static void AddCBWithOffset(List<ComboItem> cbList, IReadOnlyList<string> inStrings, int offset, params int[] allowed) public static void AddCBWithOffset(List<ComboItem> cbList, IReadOnlyList<string> inStrings, int offset, int[] allowed)
{ {
int beginCount = cbList.Count; int beginCount = cbList.Count;
foreach (var index in allowed) foreach (var index in allowed)
@ -108,6 +105,18 @@ namespace PKHeX.Core
cbList.Sort(beginCount, allowed.Length, Comparer); cbList.Sort(beginCount, allowed.Length, Comparer);
} }
public static void AddCBWithOffset(List<ComboItem> cbList, Span<string> inStrings, int offset)
{
int beginCount = cbList.Count;
for (int i = 0; i < inStrings.Length; i++)
{
var x = inStrings[i];
var item = new ComboItem(x, i + offset);
cbList.Add(item);
}
cbList.Sort(beginCount, inStrings.Length, Comparer);
}
public static void AddCB(List<ComboItem> cbList, IReadOnlyList<string> inStrings, int[] allowed) public static void AddCB(List<ComboItem> cbList, IReadOnlyList<string> inStrings, int[] allowed)
{ {
int beginCount = cbList.Count; int beginCount = cbList.Count;