/// <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; } }
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); } }