using Syntriax.Engine.Core; namespace Syntriax.Engine.Systems.Time; public class TickerTimer : Timer, ITicker { public Event OnTick { get; } = new(); public double Period { get; set; } = 1f; public int TickCounter { get; private set; } = 0; private double nextTick = double.MinValue; public override void Start(double time) { TickCounter = 0; base.Start(time); nextTick = Remaining - Period; } public override void Update() { base.Update(); while (Remaining <= nextTick) { nextTick -= Period; TickCounter++; OnTick?.Invoke(this); } } protected override void OnFinalize() { base.OnFinalize(); TickCounter = 0; nextTick = 0f; } }