/// <summary> /// Returns true if handler is mapped to any of the specified phases /// </summary> /// <param name="eventType"></param> /// <param name="handler"></param> /// <param name="phases"></param> /// <returns></returns> public virtual bool MappedToAnyPhase(string eventType, EventHandler handler, EventPhase phases) { var arr = EventPhaseHelper.BreakUpPhases(phases); foreach (EventPhase phase in arr) { EventTypePhase key = new EventTypePhase(eventType, phase); //if (_eventHandlerDict.ContainsKey(key) && _eventHandlerDict[key].Contains(handler)) if (_eventHandlerDict.ContainsKey(key)) { var exists = _eventHandlerDict[key].Exists(delegate(PriorityGroup group) { return(group.Contains(handler)); }); //foreach (PriorityGroup group in _eventHandlerDict[key]) //{ // //if (_eventHandlerDict[key].Contains(handler)) // // return true; //} return(exists); } } return(false); }
/// <summary> /// Removes all listeners for the spacified event type and phases /// </summary> /// <param name="eventType">Event type</param> /// /// <param name="phases"></param> public virtual void RemoveAllListeners(string eventType, EventPhase phases) { var arr = EventPhaseHelper.BreakUpPhases(phases); foreach (EventPhase phase in arr) { EventTypePhase key = new EventTypePhase(eventType, phase); if (_eventHandlerDict.ContainsKey(key)) { _eventHandlerDict[key].Clear(); _eventHandlerDict.Remove(key); } } }
/// <summary> /// Returns true if handler is mapped to any of the specified phases /// </summary> /// <param name="eventType"></param> /// <param name="handler"></param> /// <param name="phases"></param> /// <returns></returns> public virtual bool MappedToAnyPhase(string eventType, EventHandler handler, EventPhase phases) { var arr = EventPhaseHelper.BreakUpPhases(phases); foreach (EventPhase phase in arr) { EventTypePhase key = new EventTypePhase(eventType, phase); if (_eventHandlerDict.ContainsKey(key) && _eventHandlerDict[key].Contains(handler)) { return(true); } } return(false); }
/// <summary> /// Adds the event listener /// </summary> /// <param name="eventType">Event type</param> /// <param name="handler">Event handler</param> /// <param name="phases">Event bubbling phases that we listen to</param> public virtual void AddEventListener(string eventType, EventHandler handler, EventPhase phases) { var arr = EventPhaseHelper.BreakUpPhases(phases); foreach (EventPhase phase in arr) { EventTypePhase key = new EventTypePhase(eventType, phase); if (!_eventHandlerDict.ContainsKey(key)) // avoid key duplication { _eventHandlerDict.Add(key, new List <EventHandler>()); } if (!_eventHandlerDict[key].Contains(handler)) // avoid key + value duplication { _eventHandlerDict[key].Add(handler); } } }
/// <summary> /// Removes the event listener /// </summary> /// <param name="eventType">Event type</param> /// <param name="handler">Event handler (function)</param> /// <param name="phases">Event bubbling phases that we listen to</param> public virtual void RemoveEventListener(string eventType, EventHandler handler, EventPhase phases) { var arr = EventPhaseHelper.BreakUpPhases(phases); foreach (EventPhase phase in arr) { EventTypePhase key = new EventTypePhase(eventType, phase); if (_eventHandlerDict.ContainsKey(key)) { foreach (PriorityGroup group in _eventHandlerDict[key]) { if (group.Contains(handler)) { group.Remove(handler); } if (group.Count == 0) { if (null == _tempList) { _tempList = new List <PriorityGroup>(); } _tempList.Add(group); } } if (null != _tempList) { foreach (PriorityGroup @group in _tempList) { _eventHandlerDict[key].Remove(@group); // cleanup } _tempList.Clear(); } if (_eventHandlerDict[key].Count == 0) { _eventHandlerDict.Remove(key); // cleanup } } } }
/// <summary> /// Adds the event listener /// </summary> /// <param name="eventType">Event type</param> /// <param name="handler">Event handler</param> /// <param name="phases">Event bubbling phases that we listen to</param> /// <param name="priority">Event priority</param> public virtual void AddEventListener(string eventType, EventHandler handler, EventPhase phases, int priority) { var arr = EventPhaseHelper.BreakUpPhases(phases); foreach (EventPhase phase in arr) { EventTypePhase key = new EventTypePhase(eventType, phase); if (!_eventHandlerDict.ContainsKey(key)) // avoid key duplication { _eventHandlerDict.Add(key, new List <PriorityGroup>()); } var group = _eventHandlerDict[key].Find(delegate(PriorityGroup g) { return(g.Priority == priority); }); if (null == group) { //if (0 != priority) // Debug.Log("Creating new group with priority " + priority); group = new PriorityGroup { Priority = priority }; // add and sort _eventHandlerDict[key].Add(group); // if having multiple priorities, sort now if (_eventHandlerDict[key].Count > 0) { _eventHandlerDict[key].Sort(PriorityComparer); } } if (!group.Contains(handler)) // avoid key + value duplication { group.Add(handler); } } }
/// <summary> /// Removes the event listener /// </summary> /// <param name="eventType">Event type</param> /// <param name="handler">Event handler (function)</param> /// <param name="phases">Event bubbling phases that we listen to</param> public virtual void RemoveEventListener(string eventType, EventHandler handler, EventPhase phases) { var arr = EventPhaseHelper.BreakUpPhases(phases); foreach (EventPhase phase in arr) { EventTypePhase key = new EventTypePhase(eventType, phase); if (_eventHandlerDict.ContainsKey(key)) { if (_eventHandlerDict[key].Contains(handler)) { _eventHandlerDict[key].Remove(handler); } if (_eventHandlerDict[key].Count == 0) // cleanup { _eventHandlerDict.Remove(key); } } } }