Exemple #1
0
        /// <summary>
        /// 添加Listener
        /// </summary>
        public void AddListener <T>(EventDelegateX <T> del) where T : GameEvent
        {
            EventDelegateX internalDelegate = (e) => { del((T)e); };

            //已存在,返回
            if (DelegateLookupMap.ContainsKey(del) && DelegateLookupMap[del] == internalDelegate)
            {
                return;
            }

            //加入delegateLookup中
            DelegateLookupMap[del] = internalDelegate;

            //加入delegates中
            EventDelegateX tempDel;

            if (DelegatesMap.TryGetValue(typeof(T), out tempDel))
            {
                DelegatesMap[typeof(T)] = tempDel += internalDelegate;
            }
            else
            {
                DelegatesMap[typeof(T)] = internalDelegate;
            }
        }
Exemple #2
0
        public void RemoveListener <T>(EventDelegateX <T> del) where T : GameEvent
        {
            EventDelegateX internalDelegate;

            if (DelegateLookupMap.TryGetValue(del, out internalDelegate))
            {
                EventDelegateX tempDel;
                if (DelegatesMap.TryGetValue(typeof(T), out tempDel))
                {
                    tempDel -= internalDelegate;
                    if (tempDel == null)
                    {
                        DelegatesMap.Remove(typeof(T));
                    }
                    else
                    {
                        DelegatesMap[typeof(T)] = tempDel;
                    }
                }

                DelegateLookupMap.Remove(del);
            }
        }