using System; using System.Collections.Generic; using System.IO; using UnityEngine; namespace Amanotes.Core { [Serializable] internal class LocalSymbolOverrides { private static readonly string dir = Path.Combine("Library", "AmaDev"); private static readonly string filePath = Path.Combine(dir, "local-symbols.json"); public List overrides = new List(); [Serializable] internal class SymbolOverride { public string name; public bool enabled; } internal static LocalSymbolOverrides Load() { if (!File.Exists(filePath)) return new LocalSymbolOverrides(); var json = File.ReadAllText(filePath); if (string.IsNullOrEmpty(json)) return new LocalSymbolOverrides(); var result = JsonUtility.FromJson(json); return result ?? new LocalSymbolOverrides(); } internal void Save() { if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); File.WriteAllText(filePath, JsonUtility.ToJson(this, true)); } internal bool HasOverride(string symbolName) { for (int i = 0; i < overrides.Count; i++) if (overrides[i].name == symbolName) return true; return false; } internal bool GetOverrideEnabled(string symbolName) { for (int i = 0; i < overrides.Count; i++) if (overrides[i].name == symbolName) return overrides[i].enabled; return false; } internal void SetOverride(string symbolName, bool enabled) { for (int i = 0; i < overrides.Count; i++) { if (overrides[i].name != symbolName) continue; overrides[i].enabled = enabled; Save(); return; } overrides.Add(new SymbolOverride { name = symbolName, enabled = enabled }); Save(); } internal void RemoveOverride(string symbolName) { for (int i = overrides.Count - 1; i >= 0; i--) { if (overrides[i].name != symbolName) continue; overrides.RemoveAt(i); Save(); return; } } internal void ApplyTo(HashSet symbols) { for (int i = 0; i < overrides.Count; i++) { if (overrides[i].enabled) symbols.Add(overrides[i].name); else symbols.Remove(overrides[i].name); } } } }