using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace RichFrame.Event { /// /// 事件管理器 /// public class EventManager : Singleton { public Dictionary> eventsDic = new Dictionary>(); /// /// 监听一个事件 /// /// 事件名称 /// 监听方法 void ListenEvent(string eventName, Delegate listener) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { if (!listeners.Contains(listener)) { listeners.Add(listener); } } else { listeners = new List(); listeners.Add(listener); eventsDic.Add(eventName, listeners); } } /// /// 移除一个监听 /// /// 事件名 /// id void RemoveEvent(string eventName, Delegate handler) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { listeners.Remove(handler); if (listeners.Count == 0) eventsDic.Remove(eventName); } } #region 监听事件 public void ListenEvent(string eventName,Action handler) { ListenEvent(eventName, (Delegate)handler); } public void ListenEvent(string eventName,Action handler) { ListenEvent(eventName, (Delegate)handler); } public void ListenEvent(string eventName, Action handler) { ListenEvent(eventName, (Delegate)handler); } public void ListenEvent(string eventName, Action handler) { ListenEvent(eventName, (Delegate)handler); } public void ListenEvent(string eventName, Action handler) { ListenEvent(eventName, (Delegate)handler); } public void ListenEvent(string eventName, Action handler) { ListenEvent(eventName, (Delegate)handler); } public void ListenEvent(string eventName, Action handler) { ListenEvent(eventName, (Delegate)handler); } #endregion #region 移除事件监听 public void RemoveListener(string eventName,Action handler) { RemoveEvent(eventName, handler); } public void RemoveListener(string eventName, Action handler) { RemoveEvent(eventName, handler); } public void RemoveListener(string eventName, Action handler) { RemoveEvent(eventName, handler); } public void RemoveListener(string eventName, Action handler) { RemoveEvent(eventName, handler); } public void RemoveListener(string eventName, Action handler) { RemoveEvent(eventName, handler); } public void RemoveListener(string eventName, Action handler) { RemoveEvent(eventName, handler); } #endregion #region 执行事件 public void ExecuteEvent(string eventName) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { foreach (var item in listeners) { ((Action)item)(); } } } public void ExecuteEvent(string eventName,T arg0) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { foreach (var item in listeners) { ((Action)item)(arg0); } } } public void ExecuteEvent(string eventName, T arg0, T1 arg1) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { foreach (var item in listeners) { ((Action)item)(arg0,arg1); } } } public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { foreach (var item in listeners) { ((Action)item)(arg0, arg1, arg2); } } } public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2, T3 arg3) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { foreach (var item in listeners) { ((Action)item)(arg0, arg1, arg2, arg3); } } } public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { foreach (var item in listeners) { ((Action)item)(arg0, arg1, arg2, arg3, arg4); } } } public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) { List listeners; if (eventsDic.TryGetValue(eventName, out listeners)) { foreach (var item in listeners) { ((Action)item)(arg0, arg1, arg2, arg3, arg4, arg5); } } } #endregion } }