public static void Dispatch <T>(EventID eventId, T obj) { BaseEvents baseEvents; if (Instance.eventDictionary.TryGetValue(eventId, out baseEvents)) { baseEvents.isLock = true; GenericEvents1 <T> impEvents = baseEvents as GenericEvents1 <T>; int count = impEvents.eventList.Count; for (int i = 0; i < count; ++i) { EventFun1 <T> dlgt = impEvents.eventList[i]; dlgt(obj); } if (impEvents.deleteRequests.Count > 0) { for (int i = 0; i < impEvents.deleteRequests.Count; ++i) { impEvents.eventList.Remove(impEvents.deleteRequests[i]); } impEvents.deleteRequests.Clear(); } baseEvents.isLock = false; } }
public static void AddListener <T>(EventID eventId, EventFun1 <T> listener) { BaseEvents baseEvents = null; if (!Instance.eventDictionary.TryGetValue(eventId, out baseEvents)) { baseEvents = new GenericEvents1 <T>(); Instance.eventDictionary.Add(eventId, baseEvents); } ((GenericEvents1 <T>)baseEvents).eventList.Add(listener); }
public static void RemoveListener <T>(EventID eventId, EventFun1 <T> listener) { BaseEvents baseEvents; if (Instance.eventDictionary.TryGetValue(eventId, out baseEvents)) { GenericEvents1 <T> impEvents = baseEvents as GenericEvents1 <T>; if (!impEvents.isLock) { impEvents.eventList.Remove(listener); } else { impEvents.deleteRequests.Add(listener); } } }