- Fixed jail chain potentially calling a GameManager function on all clients.
98 lines
2.2 KiB
C#
98 lines
2.2 KiB
C#
|
|
using UdonSharp;
|
|
using UnityEngine;
|
|
using VRC.SDK3.Components;
|
|
using VRC.SDKBase;
|
|
using VRC.Udon.Common.Interfaces;
|
|
|
|
|
|
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
|
|
public class JailChain : UdonSharpBehaviour
|
|
{
|
|
[SerializeField] private GameManagerRound2 _GameManager;
|
|
[Space]
|
|
[SerializeField] private VRCPickup _Pickup;
|
|
[SerializeField] private Transform _ChainPivot;
|
|
[SerializeField] private Transform _ChainHome;
|
|
[SerializeField] private Transform _PullTarget;
|
|
[Space]
|
|
[SerializeField] private Animator _JailChainAnimator;
|
|
[Space]
|
|
[Tooltip("Speed at which the chain returns to its neutral pose.")]
|
|
[SerializeField] private float _ReturnSpeedMultiplier = 5.0f;
|
|
|
|
[UdonSynced, FieldChangeCallback(nameof(Show))] private bool _Show = false;
|
|
[UdonSynced] private bool _PullChain = false;
|
|
[UdonSynced] private bool _HasBeenActivated = false;
|
|
|
|
|
|
public override void PostLateUpdate()
|
|
{
|
|
if (_PullChain)
|
|
{
|
|
if (Networking.IsOwner(gameObject) && !_HasBeenActivated && _Pickup.transform.localPosition.z < _PullTarget.transform.localPosition.z)
|
|
{
|
|
_HasBeenActivated = true;
|
|
RequestSerialization();
|
|
|
|
_GameManager.SendCustomNetworkEvent(NetworkEventTarget.Owner, "PlayInJailAnimation");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_Pickup.transform.localPosition = Vector3.Lerp(_Pickup.transform.localPosition, Vector3.zero, Time.deltaTime * _ReturnSpeedMultiplier);
|
|
}
|
|
|
|
_ChainPivot.LookAt(_ChainHome.transform);
|
|
|
|
base.PostLateUpdate();
|
|
}
|
|
|
|
public void ChainPickedUp()
|
|
{
|
|
_PullChain = true;
|
|
RequestSerialization();
|
|
}
|
|
|
|
public void ChainDropped()
|
|
{
|
|
_PullChain = false;
|
|
if (_HasBeenActivated)
|
|
{
|
|
_Pickup.pickupable = false;
|
|
SendCustomEventDelayedSeconds(nameof(HideJailChain), 3.0f);
|
|
}
|
|
RequestSerialization();
|
|
}
|
|
public void HideJailChain()
|
|
{
|
|
Show = false;
|
|
}
|
|
|
|
|
|
public void Initialise()
|
|
{
|
|
_PullChain = false;
|
|
_HasBeenActivated = false;
|
|
|
|
_Pickup.transform.localPosition = Vector3.zero;
|
|
_ChainPivot.localRotation = Quaternion.identity;
|
|
|
|
Show = false;
|
|
|
|
RequestSerialization();
|
|
}
|
|
|
|
public bool Show
|
|
{
|
|
set
|
|
{
|
|
_Show = value;
|
|
if (_Show) _Pickup.pickupable = true;
|
|
_JailChainAnimator.SetBool("Show", _Show);
|
|
RequestSerialization();
|
|
}
|
|
get => _Show;
|
|
}
|
|
}
|