using System; using System.IO; using MelonLoader; using MelonLoader.Utils; using Newtonsoft.Json; namespace ADOFAIRenderer.Core.Data; internal class GlobalConfig { public string? OutputDirectory { get; set; } public string? LastPresetName { get; set; } public bool DefaultPresetsInitialized { get; set; } } internal static class GlobalSettings { private static string GetGameRootDir() { var root = MelonEnvironment.GameRootDirectory; return string.IsNullOrEmpty(root) ? AppDomain.CurrentDomain.BaseDirectory : root; } private static string SettingsFilePath => Path.Combine(GetGameRootDir(), "UserData", "ADOFAIRenderer", "global_settings.json"); public static GlobalConfig Current { get; private set; } = new(); public static string DefaultOutputDirectory => Path.Combine(GetGameRootDir(), "Render"); public static string EffectiveOutputDirectory { get { if (!string.IsNullOrWhiteSpace(Current.OutputDirectory) && Directory.Exists(Current.OutputDirectory)) { return Current.OutputDirectory; } return DefaultOutputDirectory; } } static GlobalSettings() { Load(); } public static void Load() { try { if (File.Exists(SettingsFilePath)) { var json = File.ReadAllText(SettingsFilePath); Current = JsonConvert.DeserializeObject(json) ?? new GlobalConfig(); return; } } catch (Exception ex) { MelonLogger.Warning($"[GlobalSettings] Failed to load global settings: {ex.Message}"); } Current = new GlobalConfig(); } public static void Save() { try { var dir = Path.GetDirectoryName(SettingsFilePath); if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var json = JsonConvert.SerializeObject(Current, Formatting.Indented); File.WriteAllText(SettingsFilePath, json); } catch (Exception ex) { MelonLogger.Warning($"[GlobalSettings] Failed to save global settings: {ex.Message}"); } } }