using System; using System.Collections.Generic; using System.IO; using System.Numerics; using Newtonsoft.Json.Linq; namespace KamiLib.Configuration; public static class Migrate { private static JObject? _parsedJson; public static void LoadFile(FileInfo configFilePath) { var reader = new StreamReader(configFilePath.FullName); var fileText = reader.ReadToEnd(); reader.Dispose(); _parsedJson = JObject.Parse(fileText); } public static int GetFileVersion() { return _parsedJson?.GetValue("Version")?.Value() ?? 0; } public static Setting GetSettingValue(string key) where T : struct { return new Setting(_parsedJson!.SelectToken(key)!.Value()); } public static Setting GetSettingEnum(string key) where T : struct { var readValue = _parsedJson!.SelectToken(key)!.Value(); return new Setting((T) Enum.ToObject(typeof(T), readValue)); } public static T GetValue(string key) { return _parsedJson!.SelectToken(key)!.Value()!; } public static JArray GetArray(string key) { return (JArray) _parsedJson!.SelectToken(key)!; } public static List GetArray(string key) { var array = GetArray(key); return array.ToObject>()!; } public static Setting GetVector4(string key) { return new Setting(new Vector4 { X = GetValue($"{key}.X"), Y = GetValue($"{key}.Y"), Z = GetValue($"{key}.Z"), W = GetValue($"{key}.W"), }); } }