using System.Collections.Generic; namespace Script.FrameWork.EventSystem { public delegate void Dispatcher(EventArgs eventArgs); public class EventDispatcher { private Dictionary> _dispatcherDic = new(); public void AddEventListener(int eventKey, object obj, Dispatcher handler) { if (!_dispatcherDic.TryGetValue(eventKey, out var dic)) { dic = new Dictionary(); _dispatcherDic.Add(eventKey, dic); } if (!dic.TryGetValue(obj, out var dispatcher)) { dic.Add(obj, handler); return; } dic[obj] += handler; } public void AddUniqueEventListener(int eventKey, object obj, Dispatcher handler) { if (!_dispatcherDic.TryGetValue(eventKey, out var dic)) { dic = new Dictionary(); _dispatcherDic.Add(eventKey, dic); } if (!dic.TryGetValue(obj, out var dispatcher)) { dic.Add(obj, handler); return; } dic[obj] = handler; } public void RemoveEventListener(int eventKey, object obj) { if (_dispatcherDic.TryGetValue(eventKey, out var dic)) { if (dic.ContainsKey(obj)) dic.Remove(obj); } } public void TriggerEventListener(int eventKey, EventArgs eventArgs) { if (_dispatcherDic.TryGetValue(eventKey, out var dic)) { foreach (var (_, handler) in dic) { handler.Invoke(eventArgs); } } } } }