Files
plugin-library/Assets/00.StaryEvo/Runtime/Tool/EventKit/EventSystem/EnumEventSystem.cs
2025-04-11 09:56:06 +08:00

221 lines
7.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Stary.Evo
{
public class EnumEventSystem
{
public static readonly EnumEventSystem Global = new EnumEventSystem();
private readonly Dictionary<string, IEasyEvent> mEvents = new Dictionary<string, IEasyEvent>(50);
public EnumEventSystem(){}
#region
public IUnRegister Register<T>(T key, Action onEvent)where T : IConvertible
{
var kv =$"{key.ToString()}";
if (mEvents.TryGetValue(kv, out var e))
{
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
{
var kv =$"{key.ToString()}_{typeof(T1).Name}";
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
{
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}";
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
{
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}_{typeof(T3).Name}";
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
{
var kv =$"{key.ToString()}_objects";
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
{
var kv = key.ToString();
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
{
var kv =$"{key.ToString()}_{typeof(T1).Name}";
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
{
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}";
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
{
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}_{typeof(T3).Name}";
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
{
var kv =$"{key.ToString()}_objects";
if (mEvents.TryGetValue(kv, out var e))
{
e.As<EasyEvent<object[]>>()?.UnRegister(onEvent);
}
}
public void UnRegisterAll()
{
mEvents.Clear();
}
public void Send<T>(T key) where T : IConvertible
{
var kv = key.ToString();
if (mEvents.TryGetValue(kv, out var e))
{
e.As<EasyEvent>().Trigger();
}
else
{
Debug.LogError($"UnityEvo没有找到对应的事件{kv}");
}
}
public void Send<T,T1>(T key, T1 t1) where T : IConvertible
{
var kv =$"{key.ToString()}_{typeof(T1).Name}";
if (mEvents.TryGetValue(kv, out var e))
{
e.As<EasyEvent<T1>>().Trigger(t1);
}
else
{
Debug.LogError($"UnityEvo没有找到对应的事件{kv}");
}
}
public void Send<T,T1,T2>(T key, T1 t1,T2 t2) where T : IConvertible
{
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}";
if (mEvents.TryGetValue(kv, out var e))
{
e.As<EasyEvent<T1,T2>>().Trigger(t1,t2);
}
else
{
Debug.LogError($"UnityEvo没有找到对应的事件{kv}");
}
}
public void Send<T,T1,T2,T3>(T key, T1 t1,T2 t2 ,T3 t3) where T : IConvertible
{
var kv =$"{key.ToString()}_{typeof(T1).Name}_{typeof(T2).Name}_{typeof(T3).Name}";
if (mEvents.TryGetValue(kv, out var e))
{
e.As<EasyEvent<T1,T2,T3>>().Trigger(t1,t2,t3);
}
else
{
Debug.LogError($"UnityEvo没有找到对应的事件{kv}");
}
}
public void Send<T>(T key, params object[] args) where T : IConvertible
{
var kv =$"{key.ToString()}_objects";
if (mEvents.TryGetValue(kv, out var e))
{
e.As<EasyEvent<string,object[]>>().Trigger(kv,args);
}
else
{
Debug.LogError($"UnityEvo没有找到对应的事件{kv}");
}
}
#endregion
public void Dispose()
{
mEvents.Clear();
}
}
}