TheStable/Assets/Scripts/TriggerToggle.cs

62 lines
1.5 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class TriggerToggle : UdonSharpBehaviour
{
[SerializeField] private Collider _Collider = null;
[SerializeField] private GameObject _ToggledObject = null;
[Tooltip("When true, object is active when player is inside trigger volume. If false, object is inactive when inside trigger volume.")]
[SerializeField] private bool _ActiveOnTrigger = true;
[Tooltip("Set number of seconds to delay toggle when entering trigger volume.")]
[SerializeField] private float _EnterDelay = 0.0f;
[Tooltip("Set number of seconds to delay toggle when exiting trigger volume.")]
[SerializeField] private float _ExitDelay = 0.0f;
public override void OnPlayerTriggerEnter(VRCPlayerApi Player)
{
if (Player.isLocal)
{
if (_EnterDelay > 0.01f)
{
SendCustomEventDelayedSeconds(nameof(EnableToggledObject), _EnterDelay);
}
else
{
EnableToggledObject();
}
}
base.OnPlayerTriggerEnter(Player);
}
public void EnableToggledObject()
{
_ToggledObject.SetActive(_ActiveOnTrigger);
}
public override void OnPlayerTriggerExit(VRCPlayerApi Player)
{
if (Player.isLocal)
{
if (_ExitDelay > 0.01f)
{
SendCustomEventDelayedSeconds(nameof(DisableToggledObject), _ExitDelay);
}
else
{
DisableToggledObject();
}
}
base.OnPlayerTriggerExit(Player);
}
public void DisableToggledObject()
{
_ToggledObject.SetActive(!_ActiveOnTrigger);
}
}