using System; using System.Collections.Generic; namespace ET { public class NumericWatcherComponentAwakeSystem : AwakeSystem { public override void Awake(NumericWatcherComponent self) { self.Awake(); } } public class NumericWatcherComponentLoadSystem : LoadSystem { public override void Load(NumericWatcherComponent self) { self.Load(); } } /// /// 监视数值变化组件,分发监听 /// public class NumericWatcherComponent : Entity { public static NumericWatcherComponent Instance; private Dictionary> allWatchers; public void Awake() { Instance = this; this.Load(); } public void Load() { this.allWatchers = new Dictionary>(); HashSet types = Game.EventSystem.GetTypes(typeof(NumericWatcherAttribute)); foreach (Type type in types) { object[] attrs = type.GetCustomAttributes(typeof(NumericWatcherAttribute), false); foreach (object attr in attrs) { NumericWatcherAttribute numericWatcherAttribute = (NumericWatcherAttribute)attr; INumericWatcher obj = (INumericWatcher)Activator.CreateInstance(type); if (!this.allWatchers.ContainsKey(numericWatcherAttribute.NumericType)) { this.allWatchers.Add(numericWatcherAttribute.NumericType, new List()); } this.allWatchers[numericWatcherAttribute.NumericType].Add(obj); } } } public async ETTask Run(NumericType numericType, Entity id,float old,float value) { if (!id) return; List list; if (!this.allWatchers.TryGetValue(numericType, out list)) { return; } foreach (INumericWatcher numericWatcher in list) { await numericWatcher.Run(id,old, value); } } } }