/// <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); }
// 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; } } }
/// <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); }
// 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; } } }