82 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|