/// <summary> /// 添加事件 /// </summary> /// <param name="eventEnumType"></param> /// <param name="eventName"></param> /// <param name="eventCall"></param> public static GenericEvent_CallBack AddListener(GenericEventEnumType eventEnumType, string eventName, GenericEvent_CallBack listener) { GenericEvent_CallBack _listener = listener; switch (eventEnumType) { case GenericEventEnumType.Generic: if (genericEvent != null) { _listener = genericEvent.AddListener(eventName, listener); } break; case GenericEventEnumType.Message: if (messageEvent != null) { _listener = messageEvent.AddListener(eventName, listener); } break; default: break; } return(_listener); }
/// <summary> /// 去除事件 /// </summary> /// <param name="eventName"></param> /// <param name="listener"></param> public virtual void RemoveListener(string eventName, GenericEvent_CallBack listener) { EventObject eventObject = eventObjects.Find(e => e.eventName == eventName); if (eventObject != null) { bool Exist = false; foreach (var item in eventObject.eventCall.GetInvocationList()) { if (item.Method == listener.Method) { Exist = true; } } if (!Exist) { Debug.Log("listener监听事件不存在字典中!移除监听参数不能为Lambda表达式。\n解决方法请参考添加监听方法 (AddListener)的返回值!!!"); return; } eventObject.eventCall -= listener;//移除监听 if (eventObject.eventCall == null)//该类型是否还有回调,如果没有,移除 eventObjects.Remove(eventObject); } else { Debug.Log(string.Concat("事件《{0}》不存在", eventName)); } }
/// <summary> /// 添加事件 /// </summary> /// <param name="eventName"></param> /// <param name="eventCall"></param> public virtual GenericEvent_CallBack AddListener(string eventName, GenericEvent_CallBack listener) { EventObject eventObject = eventObjects.Find(e => e.eventName == eventName); if (eventObject != null) { eventObject.eventCall += listener; } else { eventObject = new EventObject(eventName, listener); eventObjects.Add(eventObject); } return listener; }
/// <summary> /// 去除事件 /// </summary> /// <param name="eventEnumType"></param> /// <param name="eventName"></param> /// <param name="listener"></param> public static void RemoveListener(GenericEventEnumType eventEnumType, string eventName, GenericEvent_CallBack listener) { switch (eventEnumType) { case GenericEventEnumType.Generic: if (genericEvent != null) { genericEvent.RemoveListener(eventName, listener); } break; case GenericEventEnumType.Message: if (messageEvent != null) { messageEvent.RemoveListener(eventName, listener); } break; default: break; } }
/// <summary> /// 添加事件 /// </summary> /// <param name="eventEnumType"></param> /// <param name="eventNames"></param> /// <param name="listener"></param> public static void AddListeners(GenericEventEnumType eventEnumType, string[] eventNames, GenericEvent_CallBack listener) { foreach (string eventName in eventNames) { AddListener(eventEnumType, eventName, listener); } }
//构造函数 public EventObject(string eventName, GenericEvent_CallBack eventCall) { this.eventName = eventName; this.eventCall = eventCall; }