85 lines
1.7 KiB
C#

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;
private bool _Enabled_Cached = 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()
{
if (_Enabled != _Enabled_Cached)
{
_Pickup.gameObject.SetActive(_Enabled);
_Pickup.transform.localPosition = Vector3.zero;
_Pickup.transform.localRotation = Quaternion.identity;
_Pickup.pickupable = Networking.IsOwner(gameObject);
_Enabled_Cached = _Enabled;
}
}
private void _TriggerPulled_Synced()
{
_Animator.SetBool("Trigger Pull", _TriggerPulled);
}
}