コード例 #1
0
 public double TimeLeft(uint token)
 {
     XTimerMgr.XTimer xTimer = null;
     if (this._dict.TryGetValue(token, out xTimer))
     {
         return(xTimer.TimeLeft());
     }
     return(0.0);
 }
コード例 #2
0
 private void KillTimer(XTimerMgr.XTimer timer)
 {
     if (timer == null)
     {
         return;
     }
     this._timers.PopHeapAt(timer.Here);
     this.Discard(timer);
 }
コード例 #3
0
 private XTimerMgr.XTimer GetTimer(double trigger, object handler, object parma, uint token, bool global, int id = -1)
 {
     if (this._pool.Count > 0)
     {
         XTimerMgr.XTimer xTimer = this._pool.Dequeue();
         xTimer.Refine(trigger, handler, parma, token, global, id);
         return(xTimer);
     }
     return(new XTimerMgr.XTimer(trigger, handler, parma, token, global, id));
 }
コード例 #4
0
 public void AdjustTimer(float interval, uint token, bool closed = false)
 {
     XTimerMgr.XTimer xTimer = null;
     if (this._dict.TryGetValue(token, out xTimer) && !xTimer.IsInPool)
     {
         double trigger     = closed ? (this._elapsed - (double)(Time.deltaTime * 0.5f) + Math.Round((double)interval, 3)) : (this._elapsed + Math.Round((double)interval, 3));
         double triggerTime = xTimer.TriggerTime;
         xTimer.Refine(trigger);
         this._timers.Adjust(xTimer, triggerTime < xTimer.TriggerTime);
     }
 }
コード例 #5
0
 private void Discard(XTimerMgr.XTimer timer)
 {
     if (timer.IsInPool)
     {
         return;
     }
     if (this._dict.Remove(timer.Token))
     {
         timer.IsInPool = true;
         this._pool.Enqueue(timer);
     }
 }
コード例 #6
0
 public void KillTimer(uint token)
 {
     if (token == 0u)
     {
         return;
     }
     XTimerMgr.XTimer timer = null;
     if (this._dict.TryGetValue(token, out timer))
     {
         this.KillTimer(timer);
     }
 }
コード例 #7
0
 private void TriggerTimers()
 {
     while (this._timers.HeapSize > 0)
     {
         XTimerMgr.XTimer xTimer = this._timers.Peek();
         float            num    = (float)(this._elapsed - xTimer.TriggerTime);
         if (num < 0f)
         {
             break;
         }
         this.ExecuteTimer(this._timers.PopHeap(), num);
     }
 }
コード例 #8
0
 public uint SetTimerAccurate(float interval, XTimerMgr.AccurateElapsedEventHandler handler, object param)
 {
     this._token += 1u;
     if (interval <= 0f)
     {
         handler(param, 0f);
         this._token += 1u;
     }
     else
     {
         double           trigger = this._elapsed + Math.Round((double)interval, 3);
         XTimerMgr.XTimer timer   = this.GetTimer(trigger, handler, param, this._token, false, -1);
         this._timers.PushHeap(timer);
         this._dict.Add(this._token, timer);
     }
     return(this._token);
 }
コード例 #9
0
        public uint SetTimer <TEnum>(float interval, XTimerMgr.ElapsedIDEventHandler handler, object param, TEnum e) where TEnum : struct
        {
            this._token += 1u;
            int id = XFastEnumIntEqualityComparer <TEnum> .ToInt(e);

            if (interval <= 0f)
            {
                handler(param, id);
                this._token += 1u;
            }
            else
            {
                double           trigger = this._elapsed + Math.Round((double)interval, 3);
                XTimerMgr.XTimer timer   = this.GetTimer(trigger, handler, param, this._token, false, id);
                this._timers.PushHeap(timer);
                this._dict.Add(this._token, timer);
            }
            return(this._token);
        }
コード例 #10
0
 private void ExecuteTimer(XTimerMgr.XTimer timer, float delta)
 {
     this.Discard(timer);
     timer.Fire(delta);
 }