//$ Copyright 2015-22, Code Respawn Technologies Pvt Ltd - All Rights Reserved $// namespace DungeonArchitect.Editors { /// /// Ticks every few milli-seconds /// public class Timer { private float hertz; /// /// Ticks per second /// public float Hertz { get { return hertz; } set { hertz = value; if (hertz == 0) { hertz = 1e-6f; } frameTime = 1.0f / hertz; } } float frameTime; float timeSinceFrameStart = 0; public delegate void OnTick(float elapsedTime); public event OnTick Tick; public Timer() { Hertz = 30; } /// /// Update should be called once per frame /// /// The frame time between calls public void Update(float deltaSeconds) { timeSinceFrameStart += deltaSeconds; if (timeSinceFrameStart >= frameTime) { timeSinceFrameStart = 0; if (Tick != null) { Tick(frameTime); } } } } }