private void Evaluate() { if (this.CalculateAge() >= timeToDetinate) { Explode(); } else { SecondsRemaining = (timeToDetinate - this.CalculateAge()).TotalSeconds; this.SizeOrPositionChanged.Fire(); if (startedTimer == false && SecondsRemaining <= 3) { if (Silent == false) { var tickLt = Lifetime.EarliestOf(this.Lifetime, this.Exploded.CreateNextFireLifetime()); Time.CurrentTime.Invoke(async() => { while (tickLt.IsExpired == false) { OnAudibleTick.Fire(this); await Time.CurrentTime.DelayAsync(1000); } }); startedTimer = true; } } } }
public override void Evaluate() { base.Evaluate(); if (this.CalculateAge() >= timeToDetinate) { Explode(); } else { SecondsRemaining = (timeToDetinate - this.CalculateAge()).TotalSeconds; this.SizeOrPositionChanged.Fire(); if (startedTimer == false && SecondsRemaining <= 3) { if (Silent == false) { OnAudibleTick.Fire(this); var d = SpaceTime.CurrentSpaceTime.Application.SetInterval(() => OnAudibleTick.Fire(this), TimeSpan.FromSeconds(1)); this.Lifetime.OnDisposed(() => { d.Dispose(); }); this.Exploded.SubscribeOnce(d.Dispose); startedTimer = true; } } } }