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] ??= new GameStrings(GameLanguage.Language2Char(index)); } public static GameStrings Strings { get => _strings; set => Sources = new GameDataSource(_strings = value); } public static GameDataSource Sources { get; private set; } = new(_strings); public static FilteredGameDataSource FilteredSources { get; set; } = new(FakeSaveFile.Default, Sources); public static string GetVersionName(GameVersion version) { var list = (ComboItem[]) VersionDataSource; var first = System.Array.Find(list, z => z.Value == (int) version); return first == null ? 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 GroundTileDataSource => Sources.GroundTileDataSource; 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 isEggLocation, int location, int format, int generation, GameVersion version) { return Strings.GetLocationName(isEggLocation, location, format, generation, version); } /// /// Gets the location list for a specific version, which can retrieve either met locations or egg locations. /// /// Version to retrieve for /// Current format context /// Egg Locations are to be retrieved instead of regular Met Locations /// Consumable list of met locations public static IReadOnlyList GetLocationList(GameVersion version, EntityContext context, bool egg = false) { return Sources.Met.GetLocationList(version, context, egg); } }