using System; using System.Collections.Generic; namespace Game { public delegate void EventHandler(TParam eventParam); public delegate void EventVoidHandler(); public class EventManager : ManagerBase { private Dictionary _mEventDict; public EventManager() { } public override void OnCreate() { _mEventDict = new Dictionary(); } public override void Update() { } public override void OnDestroy() { } public void AddEvent(EEvent eventType, EventHandler callback) { if (_mEventDict.TryGetValue(eventType, out var handler)) { _mEventDict[eventType] = (EventHandler)handler + callback; } else { _mEventDict[eventType] = callback; } } public void RemoveEvent(EEvent eventType, EventHandler callback) { if (_mEventDict.TryGetValue(eventType, out var handler)) { _mEventDict[eventType] = (EventHandler)handler - callback; } } public void SendEvent(EEvent eventType, TParam param) { if (_mEventDict.TryGetValue(eventType, out var handler)) { if (handler == null) { return; } foreach (var callback in handler.GetInvocationList()) { ((EventHandler)callback)(param); } } } public void AddEvent(EEvent eventType, EventVoidHandler callback) { if (_mEventDict.TryGetValue(eventType, out var handler)) { _mEventDict[eventType] = (EventVoidHandler)handler + callback; } else { _mEventDict[eventType] = callback; } } public void RemoveEvent(EEvent eventType, EventVoidHandler callback) { if (_mEventDict.TryGetValue(eventType, out var handler)) { _mEventDict[eventType] = (EventVoidHandler)handler - callback; } } public void SendEvent(EEvent eventType) { if (_mEventDict.TryGetValue(eventType, out var handler)) { if (handler == null) { return; } foreach (var callback in handler.GetInvocationList()) { ((EventVoidHandler)callback)(); } } } } }