using System.IO; using System.Text.Json; using System.Reflection; using GsConfigTool.Models; namespace GsConfigTool.Services; public static class EngramLibraryService { private static readonly Lazy> _engrams = new(LoadEngrams); private static readonly Lazy> _lootContainers = new(LoadLootContainers); public static IReadOnlyList Engrams => _engrams.Value; public static IReadOnlyList LootContainers => _lootContainers.Value; public static IReadOnlyList GetEngramsForGame(GameType gameType) { return Engrams.Where(e => e.GameType == "Both" || (gameType == GameType.ArkSurvivalEvolved && e.GameType == "ASE") || (gameType == GameType.ArkSurvivalAscended && e.GameType == "ASA")) .ToList(); } public static IReadOnlyList GetLootContainersForGame(GameType gameType) { return LootContainers.Where(c => c.GameType == "Both" || (gameType == GameType.ArkSurvivalEvolved && c.GameType == "ASE") || (gameType == GameType.ArkSurvivalAscended && c.GameType == "ASA")) .ToList(); } private static IReadOnlyList LoadEngrams() { try { var assembly = Assembly.GetExecutingAssembly(); var resourceName = "GsConfigTool.Data.ArkEngrams.json"; using var stream = assembly.GetManifestResourceStream(resourceName); if (stream == null) return Array.Empty(); using var reader = new StreamReader(stream); var json = reader.ReadToEnd(); return JsonSerializer.Deserialize>(json) ?? Array.Empty(); } catch { return Array.Empty(); } } private static IReadOnlyList LoadLootContainers() { try { var assembly = Assembly.GetExecutingAssembly(); var resourceName = "GsConfigTool.Data.ArkLootContainers.json"; using var stream = assembly.GetManifestResourceStream(resourceName); if (stream == null) return Array.Empty(); using var reader = new StreamReader(stream); var json = reader.ReadToEnd(); return JsonSerializer.Deserialize>(json) ?? Array.Empty(); } catch { return Array.Empty(); } } } public class ArkEngram { public string DisplayName { get; set; } = ""; public string ClassName { get; set; } = ""; public string Category { get; set; } = ""; public int PointsCost { get; set; } public int LevelRequirement { get; set; } public string GameType { get; set; } = "Both"; // ASE, ASA, Both } public class ArkLootContainer { public string DisplayName { get; set; } = ""; public string ClassName { get; set; } = ""; public string GameType { get; set; } = "Both"; // ASE, ASA, Both }