using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; namespace WK { /// /// 不指定发送者的全局事件 /// public class GlobalEventManager : Singleton { // callback public delegate void EventCallback(params object[] objs); public Dictionary> AllEvents = new Dictionary>(); public void Register(string eventName, EventCallback callback, bool addFirst = false) { if (callback == null) { Debug.LogError("监听函数不能为空"); return; } LinkedList list; if (!AllEvents.TryGetValue(eventName, out list)) { list = new LinkedList(); // 这里最好从池子里拿 AllEvents.Add(eventName, list); } if (!list.Contains(callback)) { if (addFirst && list.Count > 0) { list.AddFirst(callback); } else { list.AddLast(callback); } } else { Debug.LogError("重复添加监听, eventName=" + eventName); } } public void UnRegister(string eventName, EventCallback callback) { if (callback == null) { Debug.LogError("监听函数不能为空"); return; } LinkedList list; if (!AllEvents.TryGetValue(eventName, out list)) { return; } list.Remove(callback); if (list.Count == 0) { AllEvents.Remove(eventName); // 如果这里list是从池子里拿的,回收它 } } public void UnRegisterEvent(string eventName) { if (AllEvents.ContainsKey(eventName)) { AllEvents.Remove(eventName); } } public void UnRegisterAll(string eventName) { AllEvents.Remove(eventName); } public void Notify(string eventName, params object[] objs) { LinkedList list; if (AllEvents.TryGetValue(eventName, out list) && list != null && list.Count > 0) { foreach (EventCallback callback in list) { if (callback != null) { callback.Invoke(objs); } } } } } }