using System;
using System.Collections.Generic;
namespace WX
{
public class EasyMsg
{
static Dictionary<UnityEngine.Object, Dictionary<string, Action<object>>> mRegisteredObjects = new Dictionary<UnityEngine.Object, Dictionary<string, Action<object>>>();
public static void AddEvent(UnityEngine.Object obj, string msgName, Action<object> onMsgReceived, int limitCount = -1)
{
if (!mRegisteredObjects.ContainsKey(obj))
{
Dictionary<string, Action<object>> dict = new Dictionary<string, Action<object>>();
dict.Add(msgName, _ => { });
dict[msgName] += onMsgReceived;
mRegisteredObjects.Add(obj, dict);
}
else
{
if (mRegisteredObjects[obj].ContainsKey(msgName))
{
mRegisteredObjects[obj][msgName] += onMsgReceived;
}
else
{
mRegisteredObjects[obj].Add(msgName, _ => { });
mRegisteredObjects[obj][msgName] += onMsgReceived;
}
}
}
public static void RemoveEvent(UnityEngine.Object obj, string eventkey = "", Action<object> onMsgReceived = null)
{
if (onMsgReceived != null)
{
if (mRegisteredObjects.ContainsKey(obj))
{
if (mRegisteredObjects[obj].ContainsKey(eventkey.ToString()))
{
mRegisteredObjects[obj][eventkey.ToString()] -= onMsgReceived;
}
}
}
else if (eventkey != "")
{
if (mRegisteredObjects.ContainsKey(obj))
{
if (mRegisteredObjects[obj].ContainsKey(eventkey.ToString()))
{
mRegisteredObjects[obj].Remove(eventkey.ToString());
}
}
}
else
{
if (mRegisteredObjects.ContainsKey(obj))
{
mRegisteredObjects[obj].Remove(eventkey.ToString());
}
}
}
public static void Execute(string msgName, object data = null)
{
foreach (var item in mRegisteredObjects)
{
foreach (var obj in item.Value)
{
if (obj.Key == msgName)
{
if (obj.Value != null)
{
obj.Value(data);
}
}
}
}
}
}
}
unity简易消息机制
最新推荐文章于 2023-04-10 11:21:33 发布