public TimerHandle(TimerManager manager, long timestamp, FAction callback) { this.manager = manager; this.TimeoutTime = timestamp; this.Callback = callback; this.StartTime = manager.now; }
public static ITimer StartTimerTimeoutAt(long timestamp, FAction callback, string name = null) { var timer = manager.StartTimer(timestamp, callback); timer.Name = name; return(timer); }
public static ITimer StartTimer(long milliseconds, FAction callback, string name = null) { return(StartTimerTimeoutAt( TimeTick.NowReal.TimeStamp + milliseconds, callback, name )); }
public static IEnumerator AsCoroutineEvery(long milliseconds, FAction coroutine) { while (true) { coroutine(); yield return(WaitFor.Milliseconds(milliseconds)); } }
public WaitForJob(FAction action) { ThreadPool.QueueUserWorkItem(state => { try { action(); } finally { IsYield = false; } }); }
public ITimer StartTimer(long timestamp, FAction callback) { if (now < 0) { throw new TimerException("StartTimer before first update."); } if (timestamp < now) { throw new TimerException("Timer timeout before now."); } var timer = new TimerHandle(this, timestamp, callback); var id = timestamp / robinTime; var queue = timers.GetValueOrAdd(id); queue.Add(timer); return(timer); }
public static ITimer StartTimerTimeoutAt(FDateTime dt, FAction callback, string name = null) { return(StartTimerTimeoutAt(dt.TimeStamp, callback, name)); }
public static ICoroutine StartCoroutineEvery(long milliseconds, FAction coroutine, string name = null) { return(StartCoroutine(AsCoroutineEvery(milliseconds, coroutine), name)); }
public static IEnumerator AsCoroutineAfter(long milliseconds, FAction coroutine) { yield return(WaitFor.Milliseconds(milliseconds)); coroutine(); }
public static ICoroutineYield Job <T1, T2>(T1 arg1, T2 arg2, FAction <T1, T2> action) { return(new WaitForJob <T1, T2>(arg1, arg2, action)); }
public static ICoroutineYield Job(FAction action) { return(new WaitForJob(action)); }