diff --git a/Assets/occlusion-portals/prefabs/double-door/TriggerDoor.cs b/Assets/occlusion-portals/prefabs/double-door/TriggerDoor.cs index b55f83a..b387e0c 100644 --- a/Assets/occlusion-portals/prefabs/double-door/TriggerDoor.cs +++ b/Assets/occlusion-portals/prefabs/double-door/TriggerDoor.cs @@ -1,4 +1,5 @@ -using UdonSharp; +using System; +using UdonSharp; using UnityEngine; using VRC.SDKBase; @@ -23,34 +24,33 @@ public class TriggerDoor : UdonSharpBehaviour public override void OnPlayerTriggerEnter(VRCPlayerApi player) { + var start = Time.realtimeSinceStartup; + if (player.IsValid()) { player.SetPlayerTag(_tagName, MagicWord); } SetDoorState(true); - _counter++; + SetCounter(_counter + 1); + + Debug.Log($"OnPlayerTriggerEnter: {Time.realtimeSinceStartup - start}s"); } public override void OnPlayerTriggerExit(VRCPlayerApi player) { + var start = Time.realtimeSinceStartup; + if (player.IsValid()) { player.SetPlayerTag(_tagName); } - - if (_counter - 1 <= 0) - { - SetDoorState(false); - _counter = 0; - } - else - { - _counter--; - } + SetDoorState(SetCounter(_counter - 1) > 0); + + Debug.Log($"OnPlayerTriggerExit: {Time.realtimeSinceStartup - start}s"); } /// - /// A fucking workaround for a fucking OnPlayerTriggerExit() event not firing on player exiting a game + /// A fucking workaround for a fucking OnPlayerTriggerExit() event not firing on player exiting a game, /// while inside a trigger volume /// public override void OnPlayerLeft(VRCPlayerApi player) @@ -67,6 +67,17 @@ public class TriggerDoor : UdonSharpBehaviour SetAnimatorValue(isOpen); } + private byte SetCounter(int value) + { + if (value < 0) + _counter = 0; + else if (value > 255) + _counter = 255; + else + _counter = (byte)value; + return _counter; + } + private void SetDoorState(bool open) { if (open == isOpen)