/// <summary> /// 添加Update更新监听 /// </summary> /// <param name="eventEnumType"></param> /// <param name="eventName"></param> /// <param name="listener"></param> public static UpdateEvent_CallBack AddUpdateListener(UpdateEventEnumType eventEnumType, string eventName, UpdateEvent_CallBack listener, OperationModeEnumType operationModeEnum = OperationModeEnumType.NoPause) { UpdateEvent_CallBack _listener = listener; switch (eventEnumType) { case UpdateEventEnumType.FixedUpdate: if (fixedUpdateEvent != null) { _listener = fixedUpdateEvent.AddListener(eventName, listener, operationModeEnum); } break; case UpdateEventEnumType.Update: if (updateEvent != null) { _listener = updateEvent.AddListener(eventName, listener, operationModeEnum); } break; case UpdateEventEnumType.LateUpdate: if (lateUpdateEvent != null) { _listener = lateUpdateEvent.AddListener(eventName, listener, operationModeEnum); } break; default: break; } return(_listener); }
/// <summary> /// 恢复暂停事件 /// </summary> public virtual void RenewPauseEvent(string eventName, UpdateEvent_CallBack listener) { if (pauseEventObjects.ContainsKey(eventName)) { UpdateEventObject eventObject = pauseEventObjects[eventName].Find(e => e.eventCall == listener); if (eventObject != null) { eventObject.isUpdate = true; } } }
/// <summary> /// 去除事件 /// </summary> /// <param name="eventName"></param> /// <param name="listener"></param> public virtual void RemoveListener(string eventName, UpdateEvent_CallBack listener, OperationModeEnumType operationModeEnum) { UpdateEventObject eventObject = default(UpdateEventObject); switch (operationModeEnum) { case OperationModeEnumType.Pause: if (pauseEventObjects.ContainsKey(eventName)) { eventObject = pauseEventObjects[eventName].Find(e => e.eventCall == listener); pauseEventObjects[eventName].Remove(eventObject); } break; case OperationModeEnumType.NoPause: if (eventObjects.ContainsKey(eventName)) { eventObject = eventObjects[eventName].Find(e => e.eventCall == listener); eventObjects[eventName].Remove(eventObject); } break; default: break; } if (eventObject != null) { bool Exist = false; foreach (var item in eventObject.eventCall.GetInvocationList()) { if (item.Method == listener.Method) { Exist = true; } } if (!Exist) { Debug.Log(eventName + "==listener监听事件不存在字典中!移除监听参数不能为Lambda表达式。\n解决方法请参考添加监听方法 (AddListener)的返回值!!!"); return; } } else { Debug.Log("事件<" + eventName + ">不存在"); } }
/// <summary> /// 添加事件 /// </summary> /// <param name="eventName"></param> /// <param name="eventCall"></param> public virtual UpdateEvent_CallBack AddListener(string eventName, UpdateEvent_CallBack listener, OperationModeEnumType operationModeEnum) { switch (operationModeEnum) { case OperationModeEnumType.Pause: if (pauseEventObjects.ContainsKey(eventName)) { pauseEventObjects[eventName].Add(new UpdateEventObject(listener)); } else { pauseEventObjects.Add(eventName, new List <UpdateEventObject>() { new UpdateEventObject(listener) }); } break; case OperationModeEnumType.NoPause: if (eventObjects.ContainsKey(eventName)) { eventObjects[eventName].Add(new UpdateEventObject(listener)); } else { eventObjects.Add(eventName, new List <UpdateEventObject>() { new UpdateEventObject(listener) }); } break; default: break; } return(listener); }
//构造函数 public UpdateEventObject(UpdateEvent_CallBack eventCall) { this.eventCall = eventCall; }
/// <summary> /// 恢复暂停事件 /// </summary> public static void RenewPauseEvent(UpdateEventEnumType eventEnumType, string eventName, UpdateEvent_CallBack listener) { switch (eventEnumType) { case UpdateEventEnumType.FixedUpdate: if (fixedUpdateEvent != null) { fixedUpdateEvent.RenewPauseEvent(eventName, listener); } break; case UpdateEventEnumType.Update: if (updateEvent != null) { updateEvent.RenewPauseEvent(eventName, listener); } break; case UpdateEventEnumType.LateUpdate: if (lateUpdateEvent != null) { lateUpdateEvent.RenewPauseEvent(eventName, listener); } break; default: break; } }
/// <summary> ///去除Update更新监听 /// </summary> /// <param name="eventEnumType"></param> /// <param name="eventName"></param> /// <param name="listener"></param> public static void RemoveUpdateListener(UpdateEventEnumType eventEnumType, string eventName, UpdateEvent_CallBack listener, OperationModeEnumType operationModeEnum = OperationModeEnumType.NoPause) { switch (eventEnumType) { case UpdateEventEnumType.FixedUpdate: if (fixedUpdateEvent != null) { fixedUpdateEvent.RemoveListener(eventName, listener, operationModeEnum); } break; case UpdateEventEnumType.Update: if (updateEvent != null) { updateEvent.RemoveListener(eventName, listener, operationModeEnum); } break; case UpdateEventEnumType.LateUpdate: if (lateUpdateEvent != null) { lateUpdateEvent.RemoveListener(eventName, listener, operationModeEnum); } break; default: break; } }