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