using System; using System.Collections.Generic; namespace Stary.Evo { public class EnumEventSystem { public static readonly EnumEventSystem Global = new EnumEventSystem(); private readonly Dictionary mEvents = new Dictionary(50); public EnumEventSystem(){} #region 功能函数 public IUnRegister Register(T key, Action onEvent)where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { var easyEvent = e.As(); return easyEvent.Register(onEvent); } else { var easyEvent = new EasyEvent(); mEvents.Add(kv,easyEvent); return easyEvent.Register(onEvent); } } public IUnRegister Register(T key, Action onEvent)where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { var easyEvent = e.As>(); return easyEvent.Register(onEvent); } else { var easyEvent = new EasyEvent(); mEvents.Add(kv,easyEvent); return easyEvent.Register(onEvent); } } public IUnRegister Register(T key, Action onEvent)where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { var easyEvent = e.As>(); return easyEvent.Register(onEvent); } else { var easyEvent = new EasyEvent(); mEvents.Add(kv,easyEvent); return easyEvent.Register(onEvent); } } public IUnRegister Register(T key, Action onEvent) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { var easyEvent = e.As>(); return easyEvent.Register(onEvent); } else { var easyEvent = new EasyEvent(); mEvents.Add(kv, easyEvent); return easyEvent.Register(onEvent); } } public IUnRegister Register(T key, Action onEvent) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { var easyEvent = e.As>(); return easyEvent.Register(onEvent); } else { var easyEvent = new EasyEvent(); mEvents.Add(kv, easyEvent); return easyEvent.Register(onEvent); } } public void UnRegister(T key, Action onEvent) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As()?.UnRegister(onEvent); } } public void UnRegister(T key, Action onEvent) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>()?.UnRegister(onEvent); } } public void UnRegister(T key, Action onEvent) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>()?.UnRegister(onEvent); } } public void UnRegister(T key, Action onEvent) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>()?.UnRegister(onEvent); } } public void UnRegister(T key, Action onEvent) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>()?.UnRegister(onEvent); } } public void UnRegisterAll() { mEvents.Clear(); } public void Send(T key) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As().Trigger(); } } public void Send(T key, T1 t1) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>().Trigger(t1); } } public void Send(T key, T1 t1,T2 t2) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>().Trigger(t1,t2); } } public void Send(T key, T1 t1,T2 t2 ,T3 t3) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>().Trigger(t1,t2,t3); } } public void Send(T key, params object[] args) where T : IConvertible { var kv = key.ToInt32(null); if (mEvents.TryGetValue(kv, out var e)) { e.As>().Trigger(kv,args); } } #endregion public void Dispose() { mEvents.Clear(); } } }