// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. namespace HoloToolkit.Unity { /// <summary> /// Structure that defines a timer. A timer can be scheduled through the TimerScheduler. /// </summary> public struct Timer { public int Id; public static Timer Invalid = new Timer(0); public Timer(int id) { Id = id; } public bool IsActive { get { return (Id != Invalid.Id) && TimerScheduler.Instance.IsTimerActive(this); } } public static Timer Start(float timeSeconds, TimerScheduler.Callback callback, bool loop = false) { if (TimerScheduler.IsInitialized) { return TimerScheduler.Instance.StartTimer(timeSeconds, callback, loop); } return Invalid; } public static Timer StartNextFrame(TimerScheduler.Callback callback) { if (TimerScheduler.IsInitialized) { return TimerScheduler.Instance.StartTimer(0.0f, callback, false, true); } return Invalid; } public void Stop() { if (TimerScheduler.IsInitialized) { TimerScheduler.Instance.StopTimer(this); Id = Invalid.Id; } } } }