/// <summary> /// 移除事件侦听 /// </summary> /// <param name="_eventId">事件ID</param> /// <param name="_callback">回调事件</param> public void RemoveCallbackListener(int _eventId, StrayFogCallbackHandler _callback) { if (mCallbackHandlerMaping.ContainsKey(_eventId) && mCallbackHandlerMaping[_eventId].Contains(_callback)) { mCallbackHandlerMaping[_eventId].Remove(_callback); } }
/// <summary> /// 添加事件侦听 /// </summary> /// <param name="_eventId">事件枚举</param> /// <param name="_callback">事件回调</param> public void AddCallbackListener(int _eventId, StrayFogCallbackHandler _callback) { if (!mCallbackHandlerMaping.ContainsKey(_eventId)) { mCallbackHandlerMaping.Add(_eventId, new List <StrayFogCallbackHandler>()); } if (!_callback.IsValid()) { #if UNITY_EDITOR Debug.LogError(string.Format("注册消息【{0}】失败=>Delegate.Target is null.", _eventId)); #endif } else if (!mCallbackHandlerMaping[_eventId].Contains(_callback)) { mCallbackHandlerMaping[_eventId].Add(_callback); } }
/// <summary> /// 处理CallbackHandler事件 /// </summary> /// <param name="_senderArgs">事件参数</param> /// <param name="_callback">回调</param> void OnProcessCallbackHandler(StrayFogEventHandlerArgs _senderArgs, StrayFogCallbackHandler _callback) { int tKey = _senderArgs.eventId; if (mCallbackHandlerMaping.ContainsKey(tKey)) { List <StrayFogCallbackHandler> remove = new List <StrayFogCallbackHandler>(); for (int i = 0; i < mCallbackHandlerMaping[tKey].Count; i++) { if (!mCallbackHandlerMaping[tKey][i].IsValid()) { remove.Add(mCallbackHandlerMaping[tKey][i]); #if UNITY_EDITOR Debug.LogError(string.Format("发布CallbackHandler消息【{0}】失败=>Delegate.Target is null.", tKey)); #endif } else { try { StrayFogCallbackHandlerArgs callbackArgs = new StrayFogCallbackHandlerArgs(_senderArgs); mCallbackHandlerMaping[tKey][i].Invoke(callbackArgs); _callback?.Invoke(callbackArgs); } catch (Exception ep) { #if UNITY_EDITOR Debug.LogError(string.Format("发布消息【{0}】失败=>{1}", tKey, ep.Message)); #endif } } } foreach (StrayFogCallbackHandler item in remove) { mCallbackHandlerMaping[tKey].Remove(item); } } }
/// <summary> /// 发布事件侦听 /// </summary> /// <param name="_senderArgs">发送者事件参数</param> /// <param name="_callback">回调</param> public void Dispatch(StrayFogEventHandlerArgs _senderArgs, StrayFogCallbackHandler _callback) { OnProcessCallbackHandler(_senderArgs, _callback); }