using System; using BITKit; using Timer = System.Timers.Timer; namespace BITKit { public class TimerTicker:ITicker { public TimerTicker() { _timer = new Timer(); _timer.Elapsed += (sender, args) => { OnTick(); if (_timer.Enabled && _timer.AutoReset is false) { _timer.Start(); } }; } public int TickRate { get; set; } public ulong TickCount { get; private set; } private readonly Timer _timer; private float _deltaTime; private event Action Tick; public void Add(Action action) { throw new NotImplementedException(); } public void Add(Action action) { Tick += action; } public void Remove(Action action) { Tick -= action; } public void ManualTick(float delta) { throw new NotImplementedException(); } public TimerTicker Start() { _deltaTime = 1f / TickRate; _timer.Interval = TimeSpan.FromSeconds(_deltaTime).TotalMilliseconds; _timer.Enabled = true; return this; } private void OnTick() { try { TickCount++; Tick?.Invoke(_deltaTime); } catch (Exception e) { BIT4Log.LogException(e); } } public void Stop() { _timer.Enabled = false; } } }