using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WCell.Core.Timers { public struct TimerEntry { private float TotalTime, LastTick; public float InitialDelay, Interval; Action Callback; public TimerEntry(float delay, float interval, Action callback) { TotalTime = LastTick = 0.0f; InitialDelay = delay; Interval = interval; Callback = callback; } public void Start() { LastTick = 0.0f; } public void Stop() { LastTick = -1.0f; } public void Update(float updateDelta) { // means this timer is not running. if (LastTick == -1.0f) return; TotalTime += updateDt; float tickDelta = TotalTime - LastTick; if (LastTick == 0.0f && tickDelta >= InitialDelay) { // initial fire. Callback(TotalTime); LastTick = TotalTime; } else if (LastTick > 0.0f && tickDelta >= Interval) { // time to fire off? i tink so! Callback(TotalTime); LastTick = TotalTime; } } } }