using System.Collections.Generic; using ProjectI.Builds; using ProjectI.Runs; namespace ProjectI.Combat { public readonly struct EffectSourceMetadata { public readonly string DisplayName, IconKey; public readonly BuffSourceKind Kind; public readonly int SourceId; public EffectSourceMetadata(string name,string icon,BuffSourceKind kind,int id) {DisplayName=name;IconKey=icon;Kind=kind;SourceId=id;} } public static class EffectSourceRegistry { private static readonly Dictionary abilities=new Dictionary(); public static void Register(IEnumerable definitions) {if(definitions==null)return;foreach(var d in definitions)if(d!=null)abilities[d.id]=new EffectSourceMetadata(d.displayName,d.id.ToString(),BuffSourceKind.Ability,d.id);} public static EffectSourceMetadata Resolve(EffectSourceKey source) { if(source.Kind==BuffSourceKind.Ability&&abilities.TryGetValue(source.SourceId,out var ability))return ability; if(source.Kind==BuffSourceKind.Core) {var core=UpgradeCatalog.Get(source.SourceId);if(core!=null)return new EffectSourceMetadata(core.Name,core.IconKey,source.Kind,source.SourceId);} return new EffectSourceMetadata("Effect "+source.SourceId,source.SourceId.ToString(),source.Kind,source.SourceId); } } }