using System; using System.Collections.Generic; using UnityEngine; namespace Jovian.EncounterSystem { [Serializable] public class DialogLine { public string id; [TextArea(2, 6)] public string text; } /// Flat registry of reusable dialog lines. Referenced via . [CreateAssetMenu(fileName = "DialogLineLibrary", menuName = "Jovian/Encounter System/Dialog Line Library", order = 4)] public class DialogLineLibrary : ScriptableObject { public List lines = new(); private Dictionary cache; public string Resolve(string id) { if(string.IsNullOrEmpty(id)) { return null; } EnsureCache(); return cache.TryGetValue(id, out var text) ? text : null; } public void InvalidateCache() { cache = null; } private void EnsureCache() { if(cache != null) { return; } cache = new Dictionary(); if(lines == null) { return; } foreach(var line in lines) { if(line != null && !string.IsNullOrEmpty(line.id)) { cache[line.id] = line.text; } } } #if UNITY_EDITOR private void OnValidate() { InvalidateCache(); } #endif } }