All pastes #978784 Raw Edit

tobz

public text v1 · immutable
·published 2008-04-09 20:28 UTC
rendered paste body
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<float> Callback;

		public TimerEntry(float delay, float interval, Action<float> 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;
			}
		}
	}
}