private void Unregister(EventKey InEventKey, Delegate InDelegate, EventDelegateType InEventDelegateType) { EventDelegate eventDelegate; if (router.TryGetValue(InEventKey, out eventDelegate)) { eventDelegate = eventDelegate.NextNode; if (null == eventDelegate) { Debug.LogError(string.Format("Unregister event named {0}.", InEventKey)); } else { do { if (eventDelegate.Equals(InDelegate, InEventDelegateType)) { if (eventDelegate.NextNode == null) { eventDelegate.PrevNode.NextNode = null; } else { eventDelegate.PrevNode.NextNode = eventDelegate.NextNode; eventDelegate.NextNode.PrevNode = eventDelegate.PrevNode; } } eventDelegate = eventDelegate.NextNode; } while (null != eventDelegate); } } InvokeEventUnregisterEvent(InEventKey); }
private EventDelegate(Delegate InCusDelegate, EventDelegateType InType, bool InIsSingleTime) { CusDelegate = InCusDelegate; Type = InType; IsSingleTime = InIsSingleTime; PrevNode = null; NextNode = null; }
public static EventDelegate RegisterHead(EventDelegateType InEventDelegateType) { return(new EventDelegate(null, InEventDelegateType, false)); }
public bool Equals(Delegate InDelegate, EventDelegateType InEventDelegateType) { return(Type == InEventDelegateType && CusDelegate == InDelegate); }