using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon.Common.Interfaces; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class JailPhone : UdonSharpBehaviour { [SerializeField] private GameManagerRound2 _GameManager; [UdonSynced, FieldChangeCallback(nameof(Activate))] private bool _Activate = false; private VRCPlayerApi _CurrentOwner; public void Initialise() { _CurrentOwner = _GameManager.GetHostOwner(); transform.localPosition = Vector3.zero; transform.localRotation = Quaternion.identity; } public override void OnPickupUseDown() { if (Activate && _CurrentOwner == _GameManager.GetHostOwner()) { PlayJailCall(); } base.OnPickupUseDown(); } public override void OnOwnershipTransferred(VRCPlayerApi Player) { _CurrentOwner = Player; if (Activate && Player != _GameManager.GetHostOwner()) { PlayJailCall(); } base.OnOwnershipTransferred(Player); } private void PlayJailCall() { _GameManager.SendCustomEventDelayedSeconds("PlayJailCall", 0.75f); Activate = false; } public bool Activate { set { _Activate = value; if (_Activate) { _CurrentOwner = _GameManager.GetHostOwner(); _GameManager.PhoneRing(); } RequestSerialization(); } get => _Activate; } }