using System; using System.Collections.Generic; using UnityEngine; public enum VisualTheme { Default, EyeComfort } [Serializable] public class VisualSpriteVariantPair { public string Group; public Sprite Source; public Sprite EyeComfort; } [CreateAssetMenu(fileName = "VisualSpriteVariantMap", menuName = "TH1 Game Data/Visual Sprite Variant Map")] public class VisualSpriteVariantMapAsset : ScriptableObject { public List Pairs = new(); [NonSerialized] private Dictionary _eyeComfortDict; public Sprite Resolve(Sprite source, VisualTheme theme) { if (source == null || theme == VisualTheme.Default) return source; BuildDictIfNeeded(); return _eyeComfortDict.TryGetValue(source, out var replacement) && replacement != null ? replacement : source; } public int CountMappedPairs(VisualTheme theme) { if (theme == VisualTheme.Default) return 0; int count = 0; foreach (var pair in Pairs) { if (pair?.Source != null && pair.EyeComfort != null) count++; } return count; } public void RebuildCache() { _eyeComfortDict = null; BuildDictIfNeeded(); } private void BuildDictIfNeeded() { if (_eyeComfortDict != null) return; _eyeComfortDict = new Dictionary(); foreach (var pair in Pairs) { if (pair?.Source == null || pair.EyeComfort == null) continue; _eyeComfortDict[pair.Source] = pair.EyeComfort; } } private void OnValidate() { _eyeComfortDict = null; } }