Beispiel #1
0
    /// <summary>
    /// 添加时间回调事件
    /// </summary>
    /// <param name="destTime">Destination time.</param>
    /// <param name="callback">Callback.</param>
    /// <param name="count">count = 0表示一直循环.</param>
    public int AddFrameTake(int destFrame, int delayFrame, Action callback = null, int count = 1)
    {
        int         tid  = GetTid();
        PEFrameTake take = new PEFrameTake
        {
            tid        = tid,
            destFrame  = FrameCount + destFrame,
            delayFrame = delayFrame,
            callback   = callback,
            count      = count,
        };

        cacheFrameTakes.Add(take);

        return(tid);
    }
Beispiel #2
0
    // Update CheckFrameTake
    private void CheckFrameTake()
    {
        FrameCount++;
        for (int i = 0; i < cacheFrameTakes.Count; i++)
        {
            frameTakes.Add(cacheFrameTakes[i]);
        }
        cacheFrameTakes.Clear();

        for (int i = frameTakes.Count - 1; i >= 0; i--)
        {
            PEFrameTake take = frameTakes[i];
            if (take.destFrame > FrameCount)
            {
                continue;
            }
            Action ac = take.callback;
            // 添加异常捕获机制
            try
            {
                if (ac != null)
                {
                    ac();
                }
            }
            catch (Exception e)
            {
                Debug.Log("Exception:" + e.ToString());
            }

            if (take.count == 1)
            {
                frameTakes.RemoveAt(i);
                tidCaches.Add(take.tid);
            }
            else
            {
                if (take.count != 0)
                {
                    take.count--;
                }
                take.destFrame += take.delayFrame;
            }
        }
    }
Beispiel #3
0
    /// <summary>
    /// 替换时间回调事件
    /// </summary>
    public bool ReplaceFrameTake(int tid, int destFrame, int delayFrame, Action callback = null, int count = 1)
    {
        bool        isReplace = false;
        PEFrameTake take      = new PEFrameTake
        {
            tid        = tid,
            destFrame  = FrameCount + destFrame,
            delayFrame = delayFrame,
            callback   = callback,
            count      = count,
        };

        for (int i = 0; i < frameTakes.Count; i++)
        {
            if (frameTakes[i].tid == tid)
            {
                frameTakes[i] = take;
                isReplace     = true;
            }
        }

        return(isReplace);
    }