using TMPro; using UdonSharp; using UnityEngine; using UnityEngine.UI; using VRC.Udon.Common; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class TimerDisplay : UdonSharpBehaviour { [SerializeField] private RawImage _Timer; [SerializeField] private Material _TimerMaterial; [SerializeField] private int _MaxSeconds = 45; [SerializeField] private TextMeshProUGUI _CounterText; private int _ElapsedSeconds = 0; private int _CorrectMarkers = 0; public override void OnDeserialization(DeserializationResult Result) { _SyncedValues(); base.OnDeserialization(Result); } public void Initialise() { _ElapsedSeconds = 0; _CorrectMarkers = 0; _SyncedValues(); RequestSerialization(); } public void SecondsElapsed(int ElapsedSeconds) { _ElapsedSeconds = ElapsedSeconds; _SyncedValues(); RequestSerialization(); } public void NewCorrectMarker() { _CorrectMarkers++; _SyncedValues(); RequestSerialization(); } private void _SyncedValues() { Debug.Log("[TimerDisplay] Elapsed seconds: " + _ElapsedSeconds); _Timer.material.SetFloat("_WiperProgress", (float)_ElapsedSeconds / (float)_MaxSeconds); _CounterText.text = _CorrectMarkers.ToString(); } }