Esempio n. 1
0
    /// <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);
    }
Esempio n. 2
0
    /// <summary>
    /// 异步fire事件实际处理函数
    /// </summary>
    private static IEnumerator NonSyncFireEvent(int eventId, MixedValue para)
    {
        // 确保异步操作,需要延迟到下一帧执行
        yield return(null);

        // fire事件
        FireEventImpl(eventId, para);
    }
Esempio n. 3
0
    /// <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);
        }
    }
Esempio n. 4
0
 /// <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);
 }