using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; using static UnityEditor.EditorApplication; [UdonBehaviourSyncMode(BehaviourSyncMode.None)] public class TimerBase : UdonSharpBehaviour { public float TimerLength = 0.0f; private float _TimerCounter = 0.0f; private bool _TimerIsRunning = false; public void Update() { if (_TimerIsRunning) { _TimerCounter -= Time.deltaTime; if (_TimerCounter <= 0.0f) { _TimerCounter = TimerLength; _TimerIsRunning = false; TimerEvent(); } } } public virtual void TimerEvent() { Debug.Log("[TimerBase] This timer won't do anything. Use a subclass instead."); } public void StartTimer() { _TimerCounter = TimerLength; _TimerIsRunning = true; } public void PauseTimer() { _TimerIsRunning = false; } public void ResumeTimer() { _TimerIsRunning = true; } public void StopTimer() { PauseTimer(); _TimerCounter = TimerLength; } }