public static void RemoveListener <T>(m_EventDelegate <T> myDelegate) where T : GameEvent { m_EventDelegate internalDelegate; if (m_DelegateLookup.TryGetValue(myDelegate, out internalDelegate)) { m_EventDelegate tempDelegate; if (m_Delegates.TryGetValue(typeof(T), out tempDelegate)) { tempDelegate -= internalDelegate; if (tempDelegate == null) { m_Delegates.Remove(typeof(T)); } else { m_Delegates[typeof(T)] = tempDelegate; } } m_DelegateLookup.Remove(myDelegate); } }
public static void AddListener <T>(m_EventDelegate <T> myDelegate) where T : GameEvent { //If we have already registered this delegate then out. if (m_DelegateLookup.ContainsKey(myDelegate)) { return; } //Create a new non-generic delegate which calls our generic one. //This is the delegate we actually invoke. m_EventDelegate internalDelegate = (myEvent) => myDelegate((T)myEvent); m_DelegateLookup[myDelegate] = internalDelegate; m_EventDelegate tempDelegate; if (m_Delegates.TryGetValue(typeof(T), out tempDelegate)) { m_Delegates[typeof(T)] = tempDelegate += internalDelegate; } else { m_Delegates[typeof(T)] = internalDelegate; } }