コード例 #1
0
    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);
        }
    }
コード例 #2
0
    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;
        }
    }