private void Pause(Delegate method) { TimerHandler handler = _handlers.FirstOrDefault(t => t.method == method); if (handler != null) { float remainTime = handler.end - currentTime; if (remainTime > 0) { handler.remain = remainTime; } handler.pause = true; } }
void CreateTimer(Delegate method, float delayTime, bool repeat = false, float interval = 1f, int count = 1, params object[] args) { TimerHandler handler; // if(_pool.Count > 0) { // handler = _pool[_pool.Count - 1]; // _pool.Remove(handler); // } // else { // handler = new TimerHandler(); // } handler = new TimerHandler(); handler.method = method; handler.delay = delayTime; handler.end = handler.delay + currentTime; handler.repeat = repeat; handler.args = args; handler.count = count; handler.interval = interval; handler.UUID = TimerHandler.GUUID++; // Debug.Log("~~~ CreateTimer() target: "+handler.method.Target+" UUID "+handler.UUID); _handlers.Add(handler); }
void UpdateTime() { if (_handlers.Count <= 0) { return; } for (int i = 0; i < _handlers.Count; i++) { TimerHandler handler = _handlers[i]; float curT = currentTime; // 暂停处理 if (handler.pause) { handler.end = curT + handler.remain; } if (curT >= handler.end) { Delegate method = handler.method; object[] args = handler.args; // 是否重复 if (handler.repeat) { while (curT >= handler.end) { // -1代表无限重复 if (handler.count != -1) { handler.count--; if (handler.count <= 0) { clear(handler.method); break; } } handler.end += handler.interval; try { method.DynamicInvoke(args); } catch { Debug.LogFormat("EZTime DynamicInvokeRepeat() TargetObject Error!"); clear(handler.method, false); } finally { // Debug.LogFormat("EZTime DynamicInvoke() TargetObject finally! Target " + // method.Target + " UUID: " + handler.UUID); } } } else { try { method.DynamicInvoke(args); // clear(handler.method); } catch { Debug.LogFormat("EZTime DynamicInvoke() TargetObject Error! "); } finally { clear(handler.method); // Debug.LogFormat("EZTime DynamicInvoke() TargetObject finally! Target " + // method.Target + " UUID: " + handler.UUID); } } } } }