public int Add(int delay, TimeHandle timer) { var offset = Math.Max(1, (delay - _interval + _jiffies - 1) / _interval); var index = Math.Max((_index + offset) % _slots.Length, 0); _slots[index].Add(timer); // UnityEngine.Debug.LogWarning($"[wheel#{_depth}:{_index}<range:{_timerange} _interval:{_interval}>] add timer#{timer.id} delay:{delay} to index: {index} offset: {offset}"); return(index); }
private void Rearrange(TimeHandle timer) { var delay = Math.Max(0, timer.deadline - _elapsed); var wheelCount = _wheels.Length; for (var i = 0; i < wheelCount; i++) { var wheel = _wheels[i]; if (delay < wheel.range) { wheel.Add(delay, timer); // UnityEngine.Debug.Log($"[rearrange] {timer.id} wheel#{i}:{wheel.index}"); return; } } _wheels[wheelCount - 1].Add(delay, timer); // UnityEngine.Debug.Log($"[rearrange] {timer.id} wheel#{wheelCount - 1}:{_wheels[wheelCount - 1].index}"); }
public bool Remove(TimeHandle timer) { if (_timers.Remove(timer)) { timer.slot = null; return(true); } // var size = _timers.Count; // for (var i = 0; i < size; ++i) // { // var it = _timers[i]; // if (it == timer) // { // timer.slot = null; // _timers.RemoveAt(i); // return true; // } // } return(false); }
private TimeHandle GetTimeHandle(uint id, int delay, Action <uint> fn) { var available = _pool.Count; TimeHandle timer; if (available > 0) { timer = _pool[available - 1]; _pool.RemoveAt(available - 1); } else { timer = new TimeHandle(); } timer.id = id; timer.deadline = delay + _elapsed; timer.action = fn; timer.deleted = false; timer.slot = null; return(timer); }
private TimeHandle GetTimeHandle(ulong id, int delay, bool once, TimeHandleCallback fn) { var available = _pool.Count; TimeHandle timer; if (available > 0) { timer = _pool[available - 1]; _pool.RemoveAt(available - 1); } else { timer = new TimeHandle(); } timer.id = id; timer.delay = delay < 0 ? 0 : delay; timer.deadline = timer.delay + _elapsed; timer.action = fn; timer.once = once; timer.deleted = false; timer.slot = null; return(timer); }
public void Add(TimeHandle timer) { timer.slot = this; _timers.Add(timer); }