public static void Dispatch <T, U, V, W>(EventID eventId, T obj1, U obj2, V obj3, W obj4) { BaseEvents baseEvents; if (Instance.eventDictionary.TryGetValue(eventId, out baseEvents)) { baseEvents.isLock = true; GenericEvents4 <T, U, V, W> impEvents = baseEvents as GenericEvents4 <T, U, V, W>; int count = impEvents.eventList.Count; for (int i = 0; i < count; ++i) { EventFun4 <T, U, V, W> dlgt = impEvents.eventList[i]; dlgt(obj1, obj2, obj3, obj4); } 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, U, V, W>(EventID eventId, EventFun4 <T, U, V, W> listener) { BaseEvents baseEvents = null; if (!Instance.eventDictionary.TryGetValue(eventId, out baseEvents)) { baseEvents = new GenericEvents4 <T, U, V, W>(); Instance.eventDictionary.Add(eventId, baseEvents); } ((GenericEvents4 <T, U, V, W>)baseEvents).eventList.Add(listener); }
public static void RemoveListener <T, U, V, W>(EventID eventId, EventFun4 <T, U, V, W> listener) { BaseEvents baseEvents; if (Instance.eventDictionary.TryGetValue(eventId, out baseEvents)) { GenericEvents4 <T, U, V, W> impEvents = baseEvents as GenericEvents4 <T, U, V, W>; if (!impEvents.isLock) { impEvents.eventList.Remove(listener); } else { impEvents.deleteRequests.Add(listener); } } }