using MMMaellon.LightSync; using UdonSharp; using UnityEngine; using VRC.SDK3.Components; 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; [UdonSynced] private bool _CallHasBeenPlayed = false; private LightSync _ObjectSync; void Start() { _ObjectSync = GetComponent(); } public void Initialise() { _ObjectSync.TeleportToLocalSpace(Vector3.zero, Quaternion.identity, false); Activate = false; _CallHasBeenPlayed = false; RequestSerialization(); } public override void OnPickup() { if (Networking.LocalPlayer != _GameManager.GetHostOwner()) { PlayJailCall(); } base.OnPickup(); } public override void OnPickupUseDown() { if (Networking.LocalPlayer == _GameManager.GetHostOwner()) { PlayJailCall(); } base.OnPickupUseDown(); } private void PlayJailCall() { if (Activate && !_CallHasBeenPlayed) { _GameManager.SendCustomEventDelayedSeconds("PlayJailCall", 0.75f); _CallHasBeenPlayed = true; RequestSerialization(); } } public bool Activate { set { _Activate = value; if (_Activate) { _GameManager.PhoneRing(); } _ObjectSync.pickup.pickupable = _Activate; Debug.Log("[JailPhone] Pickupable status is now " + (_ObjectSync.pickup.pickupable ? "true" : "false")); RequestSerialization(); } get => _Activate; } }