using UdonSharp; using UnityEngine; using VRC.Udon.Common.Interfaces; using VRC.SDKBase; using VRC.Udon.Common; using VRC.SDK3.Components; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class Buzzer : UdonSharpBehaviour { [SerializeField] private GameManagerRound1 _GameManager; [Space] [SerializeField] private PlayerPodium _Podium; [SerializeField] private Animator _Animator; [SerializeField] private VRCPickup _Pickup; [UdonSynced] private bool _Enabled = false; [UdonSynced] private bool _TriggerPulled = false; public override void OnDeserialization(DeserializationResult Result) { _Enable_Synced(); _TriggerPulled_Synced(); base.OnDeserialization(Result); } public void Enable(bool EnableBuzzer) { _Enabled = EnableBuzzer; _Enable_Synced(); RequestSerialization(); } public void BuzzerUseDown() { VRCPlayerApi LocalPlayer = Networking.LocalPlayer; if (_Podium.GetPlayerID() == LocalPlayer.playerId) { _GameManager.SendCustomNetworkEvent(NetworkEventTarget.Owner, "PlayerBuzzedIn", _Podium.PlayerNumber); } _TriggerPulled = true; _TriggerPulled_Synced(); RequestSerialization(); base.OnPickupUseDown(); } public void BuzzerUseUp() { _TriggerPulled = false; _TriggerPulled_Synced(); RequestSerialization(); base.OnPickupUseUp(); } private void _Enable_Synced() { _Pickup.gameObject.SetActive(_Enabled); _Pickup.transform.localPosition = Vector3.zero; _Pickup.transform.localEulerAngles = Vector3.zero; _Pickup.pickupable = Networking.IsOwner(gameObject); } private void _TriggerPulled_Synced() { _Animator.SetBool("Trigger Pull", _TriggerPulled); } }