Jamie Greunbaum 0a98c69770 - GameManagerRound2 now uses podium owners to determine players.
- Jail phone now runs its callback as the GameManagerRound2 owner.
- Actually updated the camera system repository this time. Finally.
2026-04-26 18:00:02 -04:00

86 lines
1.7 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)
{
SendCustomEventDelayedSeconds(nameof(PlayJailCall_Delayed), 0.75f);
_CallHasBeenPlayed = true;
RequestSerialization();
}
}
public void PlayJailCall_Delayed()
{
_GameManager.SendCustomNetworkEvent(NetworkEventTarget.Owner, "PlayJailCall");
}
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;
}
}