internal void RemoveIntervaled(IIntervaledTickable tickable) { IEnumerator enumerator; if (_intervalledTicked.TryGetValue(tickable, out enumerator)) { StopCoroutine(enumerator); _intervalledTicked.Remove(tickable); } }
IEnumerator IntervaledUpdate(IIntervaledTickable tickable, float seconds) { while (true) { DateTime next = DateTime.UtcNow.AddSeconds(seconds); while (DateTime.UtcNow < next) { yield return(null); } tickable.IntervaledTick(); } }
internal void AddIntervaled(IIntervaledTickable tickable) { var methodInfo = ((Action)tickable.IntervaledTick).Method; object[] attrs = methodInfo.GetCustomAttributes(typeof(IntervaledTickAttribute), true); IEnumerator intervaledTick = IntervaledUpdate(tickable, (attrs[0] as IntervaledTickAttribute).interval); _intervalledTicked[tickable] = intervaledTick; StartCoroutine(intervaledTick); }
IEnumerator IntervaledUpdate(IIntervaledTickable tickable, float seconds) { while (true) { DateTime next = DateTime.UtcNow.AddSeconds(seconds); while (DateTime.UtcNow < next) yield return null; tickable.IntervaledTick(); } }