Repositories / GSConfigTool / GsConfigTool / Services / EngramLibraryService.cs
EngramLibraryService.cs 3.2 KB
git clone https://xarmina.eu/git/gsconfigtool Raw Download
using System.IO;
using System.Text.Json;
using System.Reflection;
using GsConfigTool.Models;

namespace GsConfigTool.Services;

public static class EngramLibraryService
{
    private static readonly Lazy<IReadOnlyList<ArkEngram>> _engrams = new(LoadEngrams);
    private static readonly Lazy<IReadOnlyList<ArkLootContainer>> _lootContainers = new(LoadLootContainers);

    public static IReadOnlyList<ArkEngram> Engrams => _engrams.Value;
    public static IReadOnlyList<ArkLootContainer> LootContainers => _lootContainers.Value;

    public static IReadOnlyList<ArkEngram> 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<ArkLootContainer> 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<ArkEngram> LoadEngrams()
    {
        try
        {
            var assembly = Assembly.GetExecutingAssembly();
            var resourceName = "GsConfigTool.Data.ArkEngrams.json";
            using var stream = assembly.GetManifestResourceStream(resourceName);
            if (stream == null) return Array.Empty<ArkEngram>();
            using var reader = new StreamReader(stream);
            var json = reader.ReadToEnd();
            return JsonSerializer.Deserialize<IReadOnlyList<ArkEngram>>(json) ?? Array.Empty<ArkEngram>();
        }
        catch
        {
            return Array.Empty<ArkEngram>();
        }
    }

    private static IReadOnlyList<ArkLootContainer> LoadLootContainers()
    {
        try
        {
            var assembly = Assembly.GetExecutingAssembly();
            var resourceName = "GsConfigTool.Data.ArkLootContainers.json";
            using var stream = assembly.GetManifestResourceStream(resourceName);
            if (stream == null) return Array.Empty<ArkLootContainer>();
            using var reader = new StreamReader(stream);
            var json = reader.ReadToEnd();
            return JsonSerializer.Deserialize<IReadOnlyList<ArkLootContainer>>(json) ?? Array.Empty<ArkLootContainer>();
        }
        catch
        {
            return Array.Empty<ArkLootContainer>();
        }
    }
}

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
}
24Fire Wuppertaler Tafel Romeo