2025-03-31 11:16:52 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2025-04-11 09:56:06 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
2025-03-31 11:16:52 +08:00
|
|
|
|
namespace Stary.Evo
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class EnumEventSystem
|
|
|
|
|
|
{
|
|
|
|
|
|
public static readonly EnumEventSystem Global = new EnumEventSystem();
|
|
|
|
|
|
|
2025-03-31 14:55:24 +08:00
|
|
|
|
private readonly Dictionary<string, IEasyEvent> mEvents = new Dictionary<string, IEasyEvent>(50);
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
public EnumEventSystem(){}
|
|
|
|
|
|
|
|
|
|
|
|
#region 功能函数
|
|
|
|
|
|
|
|
|
|
|
|
public IUnRegister Register<T>(T key, Action onEvent)where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
|
|
|
|
|
|
var kv =$"{key.ToString()}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
|
2025-03-31 11:16:52 +08:00
|
|
|
|
var easyEvent = e.As<EasyEvent>();
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = new EasyEvent();
|
|
|
|
|
|
mEvents.Add(kv,easyEvent);
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public IUnRegister Register<T,T1>(T key, Action<T1> onEvent)where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = e.As<EasyEvent<T1>>();
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = new EasyEvent<T1>();
|
|
|
|
|
|
mEvents.Add(kv,easyEvent);
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public IUnRegister Register<T,T1,T2>(T key, Action<T1,T2> onEvent)where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = e.As<EasyEvent<T1,T2>>();
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = new EasyEvent<T1,T2>();
|
|
|
|
|
|
mEvents.Add(kv,easyEvent);
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public IUnRegister Register<T,T1,T2,T3>(T key, Action<T1,T2,T3> onEvent) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}_{typeof(T3).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = e.As<EasyEvent<T1,T2,T3>>();
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = new EasyEvent<T1,T2,T3>();
|
|
|
|
|
|
mEvents.Add(kv, easyEvent);
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public IUnRegister Register<T>(T key, Action<object[]> onEvent) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_objects";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = e.As<EasyEvent<object[]>>();
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
var easyEvent = new EasyEvent<object[]>();
|
|
|
|
|
|
mEvents.Add(kv, easyEvent);
|
|
|
|
|
|
return easyEvent.Register(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void UnRegister<T>(T key, Action onEvent) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv = key.ToString();
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent>()?.UnRegister(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void UnRegister<T,T1>(T key, Action<T1> onEvent) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent<T1>>()?.UnRegister(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void UnRegister<T,T1,T2>(T key, Action<T1,T2> onEvent) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent<T1,T2>>()?.UnRegister(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void UnRegister<T,T1,T2,T3>(T key, Action<T1,T2,T3> onEvent) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}_{typeof(T3).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent<T1,T2,T3>>()?.UnRegister(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void UnRegister<T>(T key, Action<object[]> onEvent) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_objects";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent<object[]>>()?.UnRegister(onEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void UnRegisterAll()
|
|
|
|
|
|
{
|
|
|
|
|
|
mEvents.Clear();
|
|
|
|
|
|
}
|
2025-04-11 09:56:06 +08:00
|
|
|
|
|
2025-03-31 11:16:52 +08:00
|
|
|
|
public void Send<T>(T key) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv = key.ToString();
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent>().Trigger();
|
|
|
|
|
|
}
|
2025-04-11 09:56:06 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo没有找到对应的事件:{kv}");
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
public void Send<T,T1>(T key, T1 t1) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent<T1>>().Trigger(t1);
|
|
|
|
|
|
}
|
2025-04-11 09:56:06 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo没有找到对应的事件:{kv}");
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
public void Send<T,T1,T2>(T key, T1 t1,T2 t2) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent<T1,T2>>().Trigger(t1,t2);
|
|
|
|
|
|
}
|
2025-04-11 09:56:06 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo没有找到对应的事件:{kv}");
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
public void Send<T,T1,T2,T3>(T key, T1 t1,T2 t2 ,T3 t3) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}_{typeof(T3).Name}";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.As<EasyEvent<T1,T2,T3>>().Trigger(t1,t2,t3);
|
|
|
|
|
|
}
|
2025-04-11 09:56:06 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo没有找到对应的事件:{kv}");
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
public void Send<T>(T key, params object[] args) where T : IConvertible
|
|
|
|
|
|
{
|
2025-04-11 09:56:06 +08:00
|
|
|
|
var kv =$"{key.ToString()}_objects";
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
if (mEvents.TryGetValue(kv, out var e))
|
|
|
|
|
|
{
|
2025-03-31 14:55:24 +08:00
|
|
|
|
e.As<EasyEvent<string,object[]>>().Trigger(kv,args);
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
2025-04-11 09:56:06 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo没有找到对应的事件:{kv}");
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
|
|
{
|
|
|
|
|
|
mEvents.Clear();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|