From 21c0b35c856622cfe6f9eecdcfec06b08d1c8bc7 Mon Sep 17 00:00:00 2001
From: xhxy <2290327506@qq.com>
Date: Thu, 24 Apr 2025 21:51:04 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E9=81=BF=E5=85=8D=E8=A3=85?=
 =?UTF-8?q?=E7=AE=B1=E6=8B=86=E7=AE=B1=EF=BC=8C=E6=9C=89=E5=8F=82=E6=97=A0?=
 =?UTF-8?q?=E5=8F=82=E9=87=8D=E8=BD=BD=E7=9A=84=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Scripts/ProjectBase/Event/EventCenter.cs  | 98 +++++++++++++++++--
 Assets/Scripts/ProjectBase/Event/Monster.cs   |  2 +-
 Assets/Scripts/ProjectBase/Event/Other.cs     | 15 ++-
 Assets/Scripts/ProjectBase/Event/Player.cs    | 19 +++-
 Assets/Scripts/ProjectBase/Event/Task.cs      | 14 ++-
 .../Scripts/ProjectBase/Scenes/ScenesMgr.cs   |  2 +-
 6 files changed, 132 insertions(+), 18 deletions(-)

diff --git a/Assets/Scripts/ProjectBase/Event/EventCenter.cs b/Assets/Scripts/ProjectBase/Event/EventCenter.cs
index a6be2a9..19e70e3 100644
--- a/Assets/Scripts/ProjectBase/Event/EventCenter.cs
+++ b/Assets/Scripts/ProjectBase/Event/EventCenter.cs
@@ -4,33 +4,79 @@ using UnityEngine;
 using UnityEngine.Events;
 using UnityEngine.Windows;
 
+public interface IEventInfo//����һ���յĽӿ������ط�����,����ת��ԭ��
+{
+
+}
+public class EventInfo<T> : IEventInfo
+{
+    public UnityAction<T> action;
+    public EventInfo(UnityAction<T> action)
+    {
+        action += action;
+    }
+}
+
+public class EventInfo : IEventInfo
+{
+
+    public UnityAction action;
+    public EventInfo(UnityAction action)
+    {
+        this.action += action;
+    }
+}
+
+
+
 /// <summary>
 /// �¼�����
 /// 1.�ֵ� 2.ί�� 3.�۲������ģʽ
+/// 4.����
 /// </summary>
 public class EventCenter : BaseManager<EventCenter>
 {
     //key ---�¼����֣����磺�������������������ͨ�� �ȵȣ�
     //value --- ��Ӧ ��������¼� ��Ӧ��ί�к���
-    private Dictionary<string , UnityAction<object>> eventDic = new Dictionary<string , UnityAction<object>>();
+    private Dictionary<string , IEventInfo> eventDic = new Dictionary<string , IEventInfo>();
 
     /// <summary>
     /// �����¼�����
     /// </summary>
     /// <param name="name">�¼�������</param>
     /// <param name="action">׼����������ʱ���ί�к���</param>
-    public void AddEventListener(string name,UnityAction<object> action)
+    public void AddEventListener<T>(string name,UnityAction<T> action)
     {
         //��û�ж�Ӧ���¼�����
         //����
         if(eventDic.ContainsKey(name))
         {
-            eventDic[name] += action;//�Ѿ����¼���������
+            (eventDic[name] as EventInfo<T>).action += action;//�Ѿ����¼���������
         }
         //û�е����
         else
         {
-            eventDic.Add(name, action);//û�оͼ�һ��
+            eventDic.Add(name, new EventInfo<T>(action));//û�оͼ�һ��
+        }
+    }
+
+    /// <summary>
+    /// ���ؼ����¼�,����Ҫ����,û�з���
+    /// </summary>
+    /// <param name="name"></param>
+    /// <param name="action"></param>
+    public void AddEventListener(string name, UnityAction action)
+    {
+        //��û�ж�Ӧ���¼�����
+        //����
+        if (eventDic.ContainsKey(name))
+        {
+            (eventDic[name] as EventInfo).action += action;//�Ѿ����¼���������
+        }
+        //û�е����
+        else
+        {
+            eventDic.Add(name, new EventInfo(action));//û�оͼ�һ��
         }
     }
 
@@ -40,11 +86,24 @@ public class EventCenter : BaseManager<EventCenter>
     /// </summary>
     /// <param name="name"></param>
     /// <param name="action"></param>
-    public void RemoveEventListener(string name, UnityAction<object> action)
+    public void RemoveEventListener<T>(string name, UnityAction<T> action)
     {
         if(eventDic.ContainsKey(name))
         {
-            eventDic[name] -= action;
+            (eventDic[name] as EventInfo<T>).action -= action;
+        }
+    }
+
+    /// <summary>
+    /// �����¼��Ƴ�,û�з���
+    /// </summary>
+    /// <param name="name"></param>
+    /// <param name="action"></param>
+    public void RemoveEventListener(string name, UnityAction action)
+    {
+        if (eventDic.ContainsKey(name))
+        {
+            (eventDic[name] as EventInfo).action -= action;
         }
     }
 
@@ -52,11 +111,34 @@ public class EventCenter : BaseManager<EventCenter>
     /// �¼�����
     /// </summary>
     /// <param name="name">��һ�����ֵ��¼�������</param>
-    public void EvennTrigger(string name,object info)
+    public void EventTrigger<T>(string name,T info)
     {
         if(eventDic.ContainsKey(name))
         {
-            eventDic[name].Invoke(info);//�оʹ����¼�
+            if((eventDic[name] as EventInfo<T>).action != null)
+            {
+                (eventDic[name] as EventInfo<T>).action.Invoke(info);
+            }
+            
+          //  eventDic[name].Invoke(info);//�оʹ����¼�
+        }
+    }
+
+    /// <summary>
+    /// �����¼�������û�з���
+    /// </summary>
+    /// <param name="name"></param>
+    /// <param name="info"></param>
+    public void EventTrigger(string name)
+    {
+        if (eventDic.ContainsKey(name))
+        {
+            if ((eventDic[name] as EventInfo).action != null)
+            {
+                (eventDic[name] as EventInfo).action.Invoke();
+            }
+
+            //  eventDic[name].Invoke(info);//�оʹ����¼�
         }
     }
 
diff --git a/Assets/Scripts/ProjectBase/Event/Monster.cs b/Assets/Scripts/ProjectBase/Event/Monster.cs
index 7c96430..6ace7d3 100644
--- a/Assets/Scripts/ProjectBase/Event/Monster.cs
+++ b/Assets/Scripts/ProjectBase/Event/Monster.cs
@@ -22,6 +22,6 @@ public class Monster : MonoBehaviour
     {
         Debug.Log("��������");
         //�����¼�
-        EventCenter.GetInstance().EvennTrigger("MonsterDead",this);
+        EventCenter.GetInstance().EventTrigger<Monster>("MonsterDead",this);
     }
 }
diff --git a/Assets/Scripts/ProjectBase/Event/Other.cs b/Assets/Scripts/ProjectBase/Event/Other.cs
index 13a9aa1..a9d60ad 100644
--- a/Assets/Scripts/ProjectBase/Event/Other.cs
+++ b/Assets/Scripts/ProjectBase/Event/Other.cs
@@ -6,11 +6,22 @@ public class Other : MonoBehaviour
 {
     void Start()
     {
-        EventCenter.GetInstance().AddEventListener("MonsterDead", OtherWaitMonsterDeadDo);
+        EventCenter.GetInstance().AddEventListener<Monster>("MonsterDead", OtherWaitMonsterDeadDo);
+
+        EventCenter.GetInstance().AddEventListener("Win", Win);
+
+        //  EventCenter.GetInstance().EventTrigger<Monster>("MonsterDead", �������);
+        EventCenter.GetInstance().EventTrigger("Win");
+
     }
 
-    public void OtherWaitMonsterDeadDo(object info)
+    public void OtherWaitMonsterDeadDo(Monster info)
     {
         Debug.Log("������������Ҫ������");
     }
+    public void Win()
+    {
+        Debug.Log("�޲��¼�����");
+    }
+
 }
diff --git a/Assets/Scripts/ProjectBase/Event/Player.cs b/Assets/Scripts/ProjectBase/Event/Player.cs
index baa8f23..48aef78 100644
--- a/Assets/Scripts/ProjectBase/Event/Player.cs
+++ b/Assets/Scripts/ProjectBase/Event/Player.cs
@@ -4,14 +4,25 @@ using UnityEngine;
 
 public class Player : MonoBehaviour
 {
-  
+    /*
+      void Start()
+      {
+          EventCenter.GetInstance().AddEventListener("MonsterDead",MonsterDeadDo);
+      }
+
+     public void MonsterDeadDo(object info)
+      {
+          Debug.Log("��һ�ý���" +(info as Monster).name1);
+      }*/
+
+
     void Start()
     {
-        EventCenter.GetInstance().AddEventListener("MonsterDead",MonsterDeadDo);
+        EventCenter.GetInstance().AddEventListener<Monster>("MonsterDead", MonsterDeadDo);
     }
 
-   public void MonsterDeadDo(object info)
+    public void MonsterDeadDo(Monster info)
     {
-        Debug.Log("��һ�ý���" +(info as Monster).name1);
+        Debug.Log("��һ�ý���" + info.name1);
     }
 }
diff --git a/Assets/Scripts/ProjectBase/Event/Task.cs b/Assets/Scripts/ProjectBase/Event/Task.cs
index 08177c5..9545da7 100644
--- a/Assets/Scripts/ProjectBase/Event/Task.cs
+++ b/Assets/Scripts/ProjectBase/Event/Task.cs
@@ -5,12 +5,22 @@ using UnityEngine;
 public class Task : MonoBehaviour
 {
     // Start is called before the first frame update
+    /*    void Start()
+        {
+            EventCenter.GetInstance().AddEventListener("MonsterDead", TaskWaitMonsterDeadDo);
+        }
+
+        public void TaskWaitMonsterDeadDo(object info)
+        {
+            Debug.Log("�����¼");
+        }*/
+
     void Start()
     {
-        EventCenter.GetInstance().AddEventListener("MonsterDead", TaskWaitMonsterDeadDo);
+        EventCenter.GetInstance().AddEventListener<Monster>("MonsterDead", TaskWaitMonsterDeadDo);
     }
 
-    public void TaskWaitMonsterDeadDo(object info)
+    public void TaskWaitMonsterDeadDo(Monster info)
     {
         Debug.Log("�����¼");
     }
diff --git a/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs b/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs
index e3e13aa..a93d7bb 100644
--- a/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs
+++ b/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs
@@ -48,7 +48,7 @@ public class ScenesMgr : BaseManager<ScenesMgr>
         while(!ao.isDone)
         {
             //�¼����� ����ַ� ������� �������þ���
-            EventCenter.GetInstance().EvennTrigger("����������",ao.progress);
+            EventCenter.GetInstance().EventTrigger("����������",ao.progress);
             //������ȥ���½�����
             yield return ao.progress;
         }