From 0c401e471321042ffb05edea3cc61ac0408e3ec1 Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Mon, 3 Apr 2023 14:35:24 +0800 Subject: [PATCH] GameEvent GameEvent --- .../GameEvent/EventDispatcher.cs | 35 +++++++++++-------- .../GameFramework/GameEvent/EventMgr.cs | 31 ++++++++++------ .../GameFramework/GameEvent/GameEvent.cs | 15 ++++---- .../GameFramework/GameEvent/GameEventMgr.cs | 8 +++++ .../GameFramework/GameEvent/StringId.cs | 34 ++++++++++++++---- .../ObjectPool/ObjectPoolComponent.cs | 4 --- 6 files changed, 86 insertions(+), 41 deletions(-) diff --git a/Assets/TEngine/Runtime/GameFramework/GameEvent/EventDispatcher.cs b/Assets/TEngine/Runtime/GameFramework/GameEvent/EventDispatcher.cs index c3cf0078..29ee968c 100644 --- a/Assets/TEngine/Runtime/GameFramework/GameEvent/EventDispatcher.cs +++ b/Assets/TEngine/Runtime/GameFramework/GameEvent/EventDispatcher.cs @@ -9,15 +9,19 @@ namespace TEngine class EventDelegateData { private int m_eventType = 0; - public List m_listExist = new List(); + private List m_listExist = new List(); private List m_addList = new List(); private List m_deleteList = new List(); private bool m_isExcute = false; private bool m_dirty = false; - public EventDelegateData(int evnetType) + /// + /// 构造函数。 + /// + /// + public EventDelegateData(int eventType) { - m_eventType = evnetType; + m_eventType = eventType; } /// @@ -232,9 +236,12 @@ namespace TEngine /// /// 封装消息的底层分发和注册。 /// - class EventDispatcher + public class EventDispatcher { - static Dictionary m_eventTable = new Dictionary(); + /// + /// 事件Table + /// + private static Dictionary s_eventTable = new Dictionary(); #region 事件管理接口 /// @@ -245,10 +252,10 @@ namespace TEngine /// public bool AddEventListener(int eventType, Delegate handler) { - if (!m_eventTable.TryGetValue(eventType, out var data)) + if (!s_eventTable.TryGetValue(eventType, out var data)) { data = new EventDelegateData(eventType); - m_eventTable.Add(eventType, data); + s_eventTable.Add(eventType, data); } return data.AddHandler(handler); @@ -261,7 +268,7 @@ namespace TEngine /// public void RemoveEventListener(int eventType, Delegate handler) { - if (m_eventTable.TryGetValue(eventType, out var data)) + if (s_eventTable.TryGetValue(eventType, out var data)) { data.RmvHandler(handler); } @@ -275,7 +282,7 @@ namespace TEngine /// 事件类型。 public void Send(int eventType) { - if (m_eventTable.TryGetValue(eventType, out var d)) + if (s_eventTable.TryGetValue(eventType, out var d)) { d.Callback(); } @@ -289,7 +296,7 @@ namespace TEngine /// public void Send(int eventType, TArg1 arg1) { - if (m_eventTable.TryGetValue(eventType, out var d)) + if (s_eventTable.TryGetValue(eventType, out var d)) { d.Callback(arg1); } @@ -305,7 +312,7 @@ namespace TEngine /// public void Send(int eventType, TArg1 arg1, TArg2 arg2) { - if (m_eventTable.TryGetValue(eventType, out var d)) + if (s_eventTable.TryGetValue(eventType, out var d)) { d.Callback(arg1, arg2); } @@ -323,7 +330,7 @@ namespace TEngine /// public void Send(int eventType, TArg1 arg1, TArg2 arg2, TArg3 arg3) { - if (m_eventTable.TryGetValue(eventType, out var d)) + if (s_eventTable.TryGetValue(eventType, out var d)) { d.Callback(arg1, arg2, arg3); } @@ -343,7 +350,7 @@ namespace TEngine /// public void Send(int eventType, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4) { - if (m_eventTable.TryGetValue(eventType, out var d)) + if (s_eventTable.TryGetValue(eventType, out var d)) { d.Callback(arg1, arg2, arg3, arg4); } @@ -365,7 +372,7 @@ namespace TEngine /// public void Send(int eventType, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5) { - if (m_eventTable.TryGetValue(eventType, out var d)) + if (s_eventTable.TryGetValue(eventType, out var d)) { d.Callback(arg1, arg2, arg3, arg4, arg5); } diff --git a/Assets/TEngine/Runtime/GameFramework/GameEvent/EventMgr.cs b/Assets/TEngine/Runtime/GameFramework/GameEvent/EventMgr.cs index 18578454..0f40c175 100644 --- a/Assets/TEngine/Runtime/GameFramework/GameEvent/EventMgr.cs +++ b/Assets/TEngine/Runtime/GameFramework/GameEvent/EventMgr.cs @@ -2,49 +2,58 @@ namespace TEngine { + /// + /// 事件实体数据。 + /// internal class EventEntryData { public object InterfaceWrap; }; - class EventMgr + /// + /// 事件管理器。 + /// + public class EventMgr { - private EventDispatcher m_dispatcher = new EventDispatcher(); - /// /// 封装了调用的代理函数 /// private Dictionary m_entry = new Dictionary(); + /// + /// 事件管理器获取接口。 + /// + /// 接口类型。 + /// 接口实例。 public T GetInterface() { string typeName = typeof(T).FullName; - EventEntryData entry; - if (m_entry.TryGetValue(typeName, out entry)) + if (typeName != null && m_entry.TryGetValue(typeName, out var entry)) { return (T)entry.InterfaceWrap; } - return default(T); } /// /// 注册wrap的函数。 /// - /// - /// + /// Wrap接口类型。 + /// callerWrap接口名字。 public void RegWrapInterface(T callerWrap) { string typeName = typeof(T).FullName; - var entry = new EventEntryData(); entry.InterfaceWrap = callerWrap; - m_entry.Add(typeName, entry); + if (typeName != null) + { + m_entry.Add(typeName, entry); + } } /// /// 分发注册器。 /// - public EventDispatcher Dispatcher => m_dispatcher; + public EventDispatcher Dispatcher { get; } = new EventDispatcher(); } } \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEvent.cs b/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEvent.cs index f510cd3b..11d868e6 100644 --- a/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEvent.cs +++ b/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEvent.cs @@ -7,15 +7,18 @@ namespace TEngine /// public static class GameEvent { + /// + /// 全局事件管理器。 + /// private static readonly EventMgr EventMgr = new EventMgr(); - public static void Init() - { - - } - #region 细分的注册接口 - + /// + /// 增加事件监听。 + /// + /// 事件类型。 + /// 事件Handler。 + /// 是否监听成功。 public static bool AddEventListener(int eventType, Action handler) { return EventMgr.Dispatcher.AddEventListener(eventType, handler); diff --git a/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEventMgr.cs b/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEventMgr.cs index 3a1afa3f..dbe5272a 100644 --- a/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEventMgr.cs +++ b/Assets/TEngine/Runtime/GameFramework/GameEvent/GameEventMgr.cs @@ -84,5 +84,13 @@ namespace TEngine AddEvent(eventType, handler); } } + + public void AddUIEvent(int eventType, Action handler) + { + if (GameEvent.AddEventListener(eventType, handler)) + { + AddEvent(eventType, handler); + } + } } } \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameFramework/GameEvent/StringId.cs b/Assets/TEngine/Runtime/GameFramework/GameEvent/StringId.cs index d2b3e716..64d7600f 100644 --- a/Assets/TEngine/Runtime/GameFramework/GameEvent/StringId.cs +++ b/Assets/TEngine/Runtime/GameFramework/GameEvent/StringId.cs @@ -2,29 +2,51 @@ namespace TEngine { + /// + /// 运行时字符串ID。 + /// public static class StringId { - private static readonly Dictionary eventTypeHashMap = new Dictionary(); - private static readonly Dictionary eventHashToStringMap = new Dictionary(); + /// + /// Key->字符串 | Value->Id (Table) + /// + private static readonly Dictionary EventTypeHashMap = new Dictionary(); + /// + /// Key->Id | Value->字符串 (Table) + /// + private static readonly Dictionary EventHashToStringMap = new Dictionary(); + /// + /// 当前Id。 + /// private static int _currentId = 0; + /// + /// 字符串转HashId。 + /// + /// 字符串Value。 + /// HashId。 public static int StringToHash(string val) { - if (eventTypeHashMap.TryGetValue(val, out var hashId)) + if (EventTypeHashMap.TryGetValue(val, out var hashId)) { return hashId; } hashId = ++_currentId; - eventTypeHashMap[val] = hashId; - eventHashToStringMap[hashId] = val; + EventTypeHashMap[val] = hashId; + EventHashToStringMap[hashId] = val; return hashId; } + /// + /// HashId转字符串。 + /// + /// HashId。 + /// 字符串。 public static string HashToString(int hash) { - if (eventHashToStringMap.TryGetValue(hash, out var value)) + if (EventHashToStringMap.TryGetValue(hash, out var value)) { return value; } diff --git a/Assets/TEngine/Runtime/GameFramework/ObjectPool/ObjectPoolComponent.cs b/Assets/TEngine/Runtime/GameFramework/ObjectPool/ObjectPoolComponent.cs index 56b00fd0..36d1d01e 100644 --- a/Assets/TEngine/Runtime/GameFramework/ObjectPool/ObjectPoolComponent.cs +++ b/Assets/TEngine/Runtime/GameFramework/ObjectPool/ObjectPoolComponent.cs @@ -38,10 +38,6 @@ namespace TEngine } } - private void Start() - { - } - /// /// 检查是否存在对象池。 ///