override public void Add(uint amount_) { if (amount_ == 0) { return; } var evolution = new Evolution() { Previous = Amount(), Added = amount_ }; amount += amount_; if (maxAmount() > 0 && Amount() > maxAmount()) { evolution.Removed = Amount() - maxAmount(); amount = maxAmount(); expiration = scheduler.Now + duration() * Amount(); scheduler.Start(Update, ref coroutine); } evolution.Current = Amount(); if (evolution.Previous == 0 || evolution.Removed > 0) { expiration = scheduler.Now + duration() * Amount(); scheduler.Start(Update, ref coroutine); } else { expiration += duration() * (evolution.Added - evolution.Removed); } _Changed(evolution); }
override public void Add(uint amount_) { if (amount_ == 0) { return; } var evolution = new Evolution() { Previous = amount, Added = amount_ }; amount += amount_; if (maxAmount() > 0 && amount > maxAmount()) { evolution.Removed = amount - maxAmount(); amount = maxAmount(); } evolution.Current = amount; if (evolution.Previous == 0) { expiration = scheduler.Now + duration(); scheduler.Start(Update, ref coroutine); } _Changed(evolution); }
override public void Add(uint amount_) { if (amount_ == 0) { return; } var evolution = new Evolution() { Previous = amount, Added = amount_ }; amount += amount_; groups.Add(new Grouped() { expiration = scheduler.Now + duration(), amount = amount_ }); scheduler.Start(Update, ref groups.Last().coroutine); if (maxAmount() > 0 && amount > maxAmount()) { evolution.Removed = amount - maxAmount(); RemoveFromGroups(evolution.Removed); } evolution.Current = amount; _Changed(evolution); }