TheStable/Assets/Scripts/TriggerToggle.cs
Jamie Greunbaum 51d8c55afe - Skee-ball now keeps track of used balls and no longer double-counts balls.
- TriggerToggle now accepts a list of GameObjects to toggle.
- Skee-ball disables only scoreboxes to prevent balls from being dropped early.
2026-03-01 18:13:33 -05:00

67 lines
1.5 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class TriggerToggle : UdonSharpBehaviour
{
[SerializeField] private GameObject[] _ToggledObjects;
[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(EnableToggledObjects), _EnterDelay);
}
else
{
EnableToggledObjects();
}
}
base.OnPlayerTriggerEnter(Player);
}
public void EnableToggledObjects()
{
foreach (GameObject Object in _ToggledObjects)
{
Object.SetActive(_ActiveOnTrigger);
}
}
public override void OnPlayerTriggerExit(VRCPlayerApi Player)
{
if (Player.isLocal)
{
if (_ExitDelay > 0.01f)
{
SendCustomEventDelayedSeconds(nameof(DisableToggledObjects), _ExitDelay);
}
else
{
DisableToggledObjects();
}
}
base.OnPlayerTriggerExit(Player);
}
public void DisableToggledObjects()
{
foreach (GameObject Object in _ToggledObjects)
{
Object.SetActive(!_ActiveOnTrigger);
}
}
}