Improved skee-ball security by delaying when scoring is re-activated.

This commit is contained in:
Jamie Greunbaum 2026-02-20 10:49:15 -05:00
parent 8fe5f7caf4
commit 77a9303b80
3 changed files with 164 additions and 3 deletions

View File

@ -462,6 +462,8 @@ MonoBehaviour:
_Collider: {fileID: 1889326494789938339}
_ToggledObject: {fileID: 9179185946203134772}
_ActiveOnTrigger: 0
_EnterDelay: 0
_ExitDelay: 2
--- !u!114 &3669668259726619245
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@ -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: <Name>k__BackingField
Entry: 1
Data: _EnterDelay
- Name: <UserType>k__BackingField
Entry: 7
Data: 16|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Single, mscorlib
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 16
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>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: <Name>k__BackingField
Entry: 1
Data: _ExitDelay
- Name: <UserType>k__BackingField
Entry: 9
Data: 16
- Name: <SystemType>k__BackingField
Entry: 9
Data: 16
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>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:

View File

@ -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);
}
}