/// <summary> /// 构造并赋值 /// 简化书写:new() + SetValue /// </summary> /// <returns>The mixed value.</returns> /// <param name="value">Value.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static MixedValue NewMixedValue <T>(T value) { MixedValue mv = new MixedValue(); mv.SetValue <T>(value); return(mv); }
/// <summary> /// 异步fire事件实际处理函数 /// </summary> private static IEnumerator NonSyncFireEvent(int eventId, MixedValue para) { // 确保异步操作,需要延迟到下一帧执行 yield return(null); // fire事件 FireEventImpl(eventId, para); }
/// <summary> /// fire事件实际处理函数 /// </summary> private static void FireEventImpl(int eventId, MixedValue para) { // 没有登记回调 if (!EventHooks.ContainsKey(eventId)) { return; } // 获取事件信息 Dictionary <string, EventHook> Hooks = EventHooks[eventId]; // 没有事件不处理 if (Hooks.Count == 0) { return; } // 需要执行回调的列表 List <EventHook> eventHookList = new List <EventHook>(); // 遍历各个回调收集需要执行的回调 foreach (string listenerId in Hooks.Keys) { // 获取回调 EventHook fun = Hooks[listenerId]; // 函数不存在 if (fun == null) { EventHooks[eventId].Remove(listenerId); continue; } // 添加到回调列表中 eventHookList.Add(fun); } try { // 遍历各个回调 foreach (EventHook fun in eventHookList) { // 函数不存在 if (fun == null) { continue; } // 执行回调 fun(eventId, para); } } catch (Exception e) { //LogMgr.Exception(e); } }
/// <summary> /// fire事件 /// </summary> /// <param name="eventId">事件类型</param> /// <param name="para">事件参数</param> /// <param name="isSync">是否同步调用</param> public static void FireEvent(int eventId, MixedValue para, bool isSync = false, bool fixedMode = false) { if (isSync) { // 同步调用 FireEventImpl(eventId, para); } //else // // 异步调用 // Coroutine.DispatchService(NonSyncFireEvent(eventId, para), fixedMode); }