IEnumerator Update() { yield return(scheduler.WaitUntil(expiration - (Amount() - 1) * duration())); coroutine = null; var evolution = new Evolution() { Previous = Amount() }; if (Amount() == 1) { yield break; } else if (Amount() == 1) { evolution.Removed = 1; amount = 0; expiration = 0; } else if (Amount() > 1) { evolution.Removed = 1; amount -= 1; expiration = scheduler.Now + duration() * Amount(); scheduler.Start(Update, ref coroutine); } evolution.Current = amount; _Changed(evolution); }
IEnumerator Update() { yield return(scheduler.WaitUntil(Expiration())); coroutine = null; Remove(Amount()); }
IEnumerator Update() { var grouped = groups.Last(); yield return(scheduler.WaitUntil(grouped.expiration)); if (groups.Count == 0 || groups.First() != grouped) { yield break; } var evolution = new Evolution() { Previous = amount, Removed = groups.First().amount }; groups.RemoveAt(0); amount -= evolution.Removed; evolution.Current = amount; _Changed(evolution); }