Jamie Greunbaum 7e9f16c493 - Jail phone pickupability syncs better, though still not perfectly.
- Ownership of game objects now transfers on game mode initialisation.
2025-09-29 17:36:17 -04:00

82 lines
1.5 KiB
C#

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<LightSync>();
}
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;
}
}