using System; using System.Collections.Generic; using System.Linq; namespace PKHeX.Core { public sealed class MemoryStrings { private readonly GameStrings s; public MemoryStrings(GameStrings strings) { s = strings; memories = new Lazy>(GetMemories); none = new Lazy>(() => Util.GetCBList(new[] {string.Empty})); species = new Lazy>(() => Util.GetCBList(s.specieslist.ToArray())); item = new Lazy>(() => Util.GetCBList(s.itemlist, Memories.MemoryItems)); genloc = new Lazy>(() => Util.GetCBList(s.genloc)); moves = new Lazy>(() => Util.GetCBList(s.movelist.ToArray())); // Hyperspace Fury specific = new Lazy>(() => Util.GetCBList(s.metXY_00000, Legal.Met_XY_0)); } private readonly Lazy> memories; private readonly Lazy> none, species, item, genloc, moves, specific; public List Memory => memories.Value; public List None => none.Value; public List Moves => moves.Value; public List Items => item.Value; public List GeneralLocations => genloc.Value; public List SpecificLocations => specific.Value; public List Species => species.Value; private List GetMemories() { // Memory Chooser int memorycount = s.memories.Length - 38; string[] mems = new string[memorycount]; int[] allowed = new int[memorycount]; for (int i = 0; i < memorycount; i++) { mems[i] = s.memories[38 + i]; allowed[i] = i + 1; } Array.Resize(ref allowed, allowed.Length - 1); var memory_list1 = Util.GetCBList(new[] { mems[0] }); Util.AddCBWithOffset(memory_list1, mems, 0, allowed); return memory_list1; } public string[] GetMemoryQualities() => s.memories.Slice(2, 7); public string[] GetMemoryFeelings() => s.memories.Slice(10, 24); public List GetArgumentStrings(MemoryArgType memIndex) { return memIndex switch { MemoryArgType.Species => Species, MemoryArgType.GeneralLocation => GeneralLocations, MemoryArgType.Item => Items, MemoryArgType.Move => Moves, MemoryArgType.SpecificLocation => SpecificLocations, _ => None }; } } }