using System.Collections.Generic; namespace PKHeX.Core { /// /// Shared instance for fetching data /// public static class GameInfo { private static readonly GameStrings[] Languages = new GameStrings[GameLanguage.LanguageCount]; public static string CurrentLanguage { get; set; } = GameLanguage.DefaultLanguage; public static readonly IReadOnlyList GenderSymbolUnicode = new[] {"♂", "♀", "-"}; public static readonly IReadOnlyList GenderSymbolASCII = new[] {"M", "F", "-"}; private static GameStrings _strings = GetStrings(CurrentLanguage); public static GameStrings GetStrings(string lang) { int index = GameLanguage.GetLanguageIndex(lang); return GetStrings(index); } public static GameStrings GetStrings(int index) { return Languages[index] ?? (Languages[index] = new GameStrings(GameLanguage.Language2Char(index))); } public static GameStrings Strings { get => _strings; set { _strings = value; Sources = new GameDataSource(_strings); FilteredSources = null; } } public static GameDataSource Sources { get; set; } public static FilteredGameDataSource FilteredSources { get; set; } public static string GetVersionName(GameVersion version) { var list = (List) VersionDataSource; var first = list.Find(z => z.Value == (int) version); return first.Equals(default(ComboItem)) ? version.ToString() : first.Text; } // DataSource providing public static IReadOnlyList ItemDataSource => FilteredSources.Items; public static IReadOnlyList SpeciesDataSource => Sources.SpeciesDataSource; public static IReadOnlyList BallDataSource => Sources.BallDataSource; public static IReadOnlyList NatureDataSource => Sources.NatureDataSource; public static IReadOnlyList AbilityDataSource => Sources.AbilityDataSource; public static IReadOnlyList VersionDataSource => Sources.VersionDataSource; public static IReadOnlyList MoveDataSource => Sources.HaXMoveDataSource; public static IReadOnlyList EncounterTypeDataSource => Sources.EncounterTypeDataSource; public static IReadOnlyList Regions => GameDataSource.Regions; public static IReadOnlyList LanguageDataSource(int gen) => GameDataSource.LanguageDataSource(gen); /// /// Gets the location name for the specified parameters. /// /// Location is from the /// Location value /// Current /// of origin /// Current GameVersion (only applicable for differentiation) /// Location name public static string GetLocationName(bool eggmet, int locval, int format, int generation, GameVersion version) { return Strings.GetLocationName(eggmet, locval, format, generation, version); } /// /// Gets the location list for a specific version, which can retrieve either met locations or egg locations. /// /// Version to retrieve for /// Generation to retrieve for /// Egg Locations are to be retrieved instead of regular Met Locations /// Consumable list of met locations public static IReadOnlyList GetLocationList(GameVersion version, int pkmFormat, bool egg = false) { return Sources.GetLocationList(version, pkmFormat, egg); } } }