From 6fb204d494b897907d655b5752196983a82ceba2 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Sat, 13 May 2023 15:20:20 +0800 Subject: *misc --- .../Assets/Scripts/Tools/GlobalEventManager.cs | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 WorldlineKeepers/Assets/Scripts/Tools/GlobalEventManager.cs (limited to 'WorldlineKeepers/Assets/Scripts/Tools/GlobalEventManager.cs') diff --git a/WorldlineKeepers/Assets/Scripts/Tools/GlobalEventManager.cs b/WorldlineKeepers/Assets/Scripts/Tools/GlobalEventManager.cs new file mode 100644 index 0000000..47f3990 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Tools/GlobalEventManager.cs @@ -0,0 +1,97 @@ +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); + } + } + } + } + + } +} -- cgit v1.1-26-g67d0