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; } } } }
private void ConnectToElement(SpacialElement element) { added.Add(element); element.Lifetime.OnDisposed(() => { removed.Add(element); }); element.SizeOrPositionChanged.SubscribeForLifetime(() => { if (element.InternalSpacialState.Changed == false) { changed.Add(element); element.InternalSpacialState.Changed = true; } }, Lifetime.EarliestOf(enablementLifetime, element.Lifetime)); }
private void ConnectToElement(SpacialElement element) { added.Add(element); element.Lifetime.OnDisposed(() => { removed.Add(element); }); element.SizeOrPositionChanged.SubscribeForLifetime(() => { if (Time.CurrentTime == null) { throw new InvalidOperationException("Change did not occur on the time thread"); } changedEvent.Fire(element); if (element.InternalSpacialState.Changed == false) { changed.Add(element); element.InternalSpacialState.Changed = true; } }, Lifetime.EarliestOf(this, element.Lifetime)); }