using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; namespace AdonFramework { /// /// 事件中心 /// public class EventCenter : BaseManager { /// /// 事件字典,存储注册事件 /// private Dictionary EventDic = new Dictionary(); /// /// 有参数注册事件 /// /// 参数类型 /// /// public void AddEventListener(string name, UnityAction action) { if (EventDic.ContainsKey(name)) { (EventDic[name] as EventInfo).action += action; } else { EventDic.Add(name, new EventInfo(action)); } } /// /// 注册事件 /// /// 事件名 /// 事件执行函数 public void AddEventListener(string name, UnityAction action) { if (EventDic.ContainsKey(name)) { (EventDic[name] as EventInfo).action += action; } else { EventDic.Add(name, new EventInfo(action)); } } /// /// 移除监听事件 /// 当注册对象销毁事调用(OnDestroy) /// /// 事件名 /// 对应的事件函数 public void RemoveEventListener(string name,UnityAction action) { if (EventDic.ContainsKey(name)) (EventDic[name] as EventInfo).action -= action; } /// /// 移除监听事件 /// 当注册对象销毁事调用(OnDestroy) /// /// 事件名 /// 对应的事件函数 public void RemoveEventListener(string name, UnityAction action) { if (EventDic.ContainsKey(name)) (EventDic[name] as EventInfo).action -= action; } /// /// 触发参数 /// /// 事件名 /// 事件参数 public void EventTrigger(string name , T info) { if (EventDic.ContainsKey(name)) { if((EventDic[name] as EventInfo).action != null) (EventDic[name] as EventInfo).action.Invoke(info); } } /// /// 触发参数 /// /// 事件名 /// 事件参数 public void EventTrigger(string name) { if (EventDic.ContainsKey(name)) { if ((EventDic[name] as EventInfo).action != null) (EventDic[name] as EventInfo).action.Invoke(); } } /// /// 清空 /// 场景切换时调用 /// public void Clear() { EventDic.Clear(); } } /// /// 事件信息接口,解决传递参数装箱拆箱对性能损耗 /// public interface IEventInfo { } /// /// 有参数事件信息类 /// /// public class EventInfo:IEventInfo { public EventInfo(UnityAction _action) { action += _action; } public UnityAction action; } /// /// 无参数事件信息类 /// public class EventInfo : IEventInfo { public EventInfo(UnityAction _action) { action += _action; } public UnityAction action; } }