From 77a9303b8061d24e159bcf26cfdb684950d9410a Mon Sep 17 00:00:00 2001 From: Jamie Greunbaum Date: Fri, 20 Feb 2026 10:49:15 -0500 Subject: [PATCH] Improved skee-ball security by delaying when scoring is re-activated. --- Assets/Pyralix/Skee-Ball/Skee-Ball.prefab | 2 + Assets/Scripts/TriggerToggle.asset | 134 +++++++++++++++++++++- Assets/Scripts/TriggerToggle.cs | 31 ++++- 3 files changed, 164 insertions(+), 3 deletions(-) diff --git a/Assets/Pyralix/Skee-Ball/Skee-Ball.prefab b/Assets/Pyralix/Skee-Ball/Skee-Ball.prefab index e44481e..995771c 100644 --- a/Assets/Pyralix/Skee-Ball/Skee-Ball.prefab +++ b/Assets/Pyralix/Skee-Ball/Skee-Ball.prefab @@ -462,6 +462,8 @@ MonoBehaviour: _Collider: {fileID: 1889326494789938339} _ToggledObject: {fileID: 9179185946203134772} _ActiveOnTrigger: 0 + _EnterDelay: 0 + _ExitDelay: 2 --- !u!114 &3669668259726619245 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/TriggerToggle.asset b/Assets/Scripts/TriggerToggle.asset index efc870b..025608c 100644 --- a/Assets/Scripts/TriggerToggle.asset +++ b/Assets/Scripts/TriggerToggle.asset @@ -44,7 +44,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 3 + Data: 5 - Name: Entry: 7 Data: @@ -235,6 +235,138 @@ MonoBehaviour: - Name: Entry: 8 Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _EnterDelay + - Name: $v + Entry: 7 + Data: 15|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _EnterDelay + - Name: k__BackingField + Entry: 7 + Data: 16|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Single, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 16 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 18|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: Set number of seconds to delay toggle when entering trigger volume. + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 19|UnityEngine.SerializeField, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _ExitDelay + - Name: $v + Entry: 7 + Data: 20|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _ExitDelay + - Name: k__BackingField + Entry: 9 + Data: 16 + - Name: k__BackingField + Entry: 9 + Data: 16 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 22|UnityEngine.TooltipAttribute, UnityEngine.CoreModule + - Name: tooltip + Entry: 1 + Data: Set number of seconds to delay toggle when exiting trigger volume. + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 23|UnityEngine.SerializeField, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: - Name: Entry: 13 Data: diff --git a/Assets/Scripts/TriggerToggle.cs b/Assets/Scripts/TriggerToggle.cs index 1c41549..ab3969c 100644 --- a/Assets/Scripts/TriggerToggle.cs +++ b/Assets/Scripts/TriggerToggle.cs @@ -13,22 +13,49 @@ public class TriggerToggle : UdonSharpBehaviour [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) { - _ToggledObject.SetActive(_ActiveOnTrigger); + 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) { - _ToggledObject.SetActive(!_ActiveOnTrigger); + if (_ExitDelay > 0.01f) + { + SendCustomEventDelayedSeconds(nameof(DisableToggledObject), _ExitDelay); + } + else + { + DisableToggledObject(); + } } base.OnPlayerTriggerExit(Player); } + public void DisableToggledObject() + { + _ToggledObject.SetActive(!_ActiveOnTrigger); + } }