Exemplo n.º 1
0
    /// <summary>
    /// 替换时间回调事件
    /// </summary>
    public bool ReplaceTimeTake(int tid, double destTime, double delayTime, Action callback = null, PETimeUnit unit = PETimeUnit.Millisecond, int count = 1)
    {
        bool   isReplace = false;
        double time      = 0;

        switch (unit)
        {
        case PETimeUnit.Millisecond:
            time = destTime;
            break;

        case PETimeUnit.Second:
            time = destTime * 1000;
            break;

        case PETimeUnit.Minute:
            time = destTime * 1000 * 60;
            break;

        case PETimeUnit.Hour:
            time = destTime * 1000 * 60 * 60;
            break;

        case PETimeUnit.Day:
            time = destTime * 1000 * 60 * 60 * 24;
            break;

        default:
            Debug.Log("Unit Error...");
            break;
        }

        double     dest = Time.realtimeSinceStartup * 1000 + time;
        PETimeTake take = new PETimeTake
        {
            tid       = tid,
            destTime  = dest,
            delayTime = delayTime,
            callback  = callback,
            count     = count,
        };

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

        return(isReplace);
    }
Exemplo n.º 2
0
    // Update CheckTimeTake
    private void CheckTimeTake()
    {
        var now = GetUtcMilliseconds();

        for (int i = 0; i < cacheTimeTakes.Count; i++)
        {
            timeTakes.Add(cacheTimeTakes[i]);
        }
        cacheTimeTakes.Clear();

        for (int i = timeTakes.Count - 1; i >= 0; i--)
        {
            PETimeTake take = timeTakes[i];
            if (take.destTime > now)
            {
                continue;
            }
            Action ac = take.callback;
            // 添加异常捕获机制
            try
            {
                if (ac != null)
                {
                    ac();
                }
            }
            catch (Exception e)
            {
                RunLog("Exception:" + e.ToString());
            }

            if (take.count == 1)
            {
                timeTakes.RemoveAt(i);
                tidCaches.Add(take.tid);
                //tids.Remove(take.tid); // 清除tid
            }
            else
            {
                if (take.count != 0)
                {
                    take.count--;
                }
                take.destTime += take.delayTime;
            }
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// 添加时间回调事件
    /// </summary>
    /// <param name="destTime">Destination time.</param>
    /// <param name="callback">Callback.</param>
    /// <param name="count">count = 0表示一直循环.</param>
    public int AddTimeTake(double destTime, double delayTime, Action callback = null, PETimeUnit unit = PETimeUnit.Millisecond, int count = 1)
    {
        double time = 0;

        switch (unit)
        {
        case PETimeUnit.Millisecond:
            time = destTime;
            break;

        case PETimeUnit.Second:
            time = destTime * 1000;
            break;

        case PETimeUnit.Minute:
            time = destTime * 1000 * 60;
            break;

        case PETimeUnit.Hour:
            time = destTime * 1000 * 60 * 60;
            break;

        case PETimeUnit.Day:
            time = destTime * 1000 * 60 * 60 * 24;
            break;

        default:
            Debug.Log("Unit Error...");
            break;
        }

        double     dest = Time.realtimeSinceStartup * 1000 + time;
        int        tid  = GetTid();
        PETimeTake take = new PETimeTake
        {
            tid       = tid,
            destTime  = dest,
            delayTime = delayTime,
            callback  = callback,
            count     = count,
        };

        cacheTimeTakes.Add(take);

        return(tid);
    }
Exemplo n.º 4
0
    // Update CheckTimeTake
    private void CheckTimeTake()
    {
        for (int i = 0; i < cacheTimeTakes.Count; i++)
        {
            timeTakes.Add(cacheTimeTakes[i]);
        }
        cacheTimeTakes.Clear();

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

            if (take.count == 1)
            {
                timeTakes.RemoveAt(i);
                tidCaches.Add(take.tid);
                //tids.Remove(take.tid); // 清除tid
            }
            else
            {
                if (take.count != 0)
                {
                    take.count--;
                }
                take.destTime += take.delayTime;
            }
        }
    }