From 0e9f7566da971f745ac47416f2339b92a138393c Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Fri, 28 Jul 2023 22:30:04 -0500 Subject: [PATCH] [GestureLock] Fixes for 2023r171 --- GestureLock/HarmonyPatches.cs | 71 +++++++++++--------------- GestureLock/Main.cs | 4 +- GestureLock/Properties/AssemblyInfo.cs | 5 +- GestureLock/format.json | 10 ++-- 4 files changed, 42 insertions(+), 48 deletions(-) diff --git a/GestureLock/HarmonyPatches.cs b/GestureLock/HarmonyPatches.cs index eab0a87..2c5fd24 100644 --- a/GestureLock/HarmonyPatches.cs +++ b/GestureLock/HarmonyPatches.cs @@ -1,58 +1,49 @@ -using ABI_RC.Core.Player; -using ABI_RC.Core.Savior; +using ABI_RC.Core.Savior; using ABI_RC.Core.UI; +using ABI_RC.Systems.InputManagement.InputModules; +using ABI_RC.Systems.InputManagement.XR; using HarmonyLib; using Valve.VR; namespace NAK.GestureLock.HarmonyPatches; -class Patches +internal class CVRInputModule_XRPatches { - private static bool isLocked; - private static float oldGestureLeft; - private static float oldGestureRight; + // Get input from SteamVR because new input system is nerfed for OpenXR... + private static readonly SteamVR_Action_Boolean _gestureToggleButton = SteamVR_Input.GetAction("ControllerToggleGestures", false); + + private static bool _isLocked; + private static float _oldGestureLeft; + private static float _oldGestureRight; [HarmonyPostfix] - [HarmonyPatch(typeof(InputModuleSteamVR), nameof(InputModuleSteamVR.UpdateInput))] - private static void Postfix_InputModuleSteamVR_UpdateInput - ( - ref CVRInputManager ____inputManager, - ref VRTrackerManager ____trackerManager, - ref SteamVR_Action_Boolean ___steamVrIndexGestureToggle - ) + [HarmonyPatch(typeof(CVRInputModule_XR), nameof(CVRInputModule_XR.Update_Emotes))] + private static void Postfix_CVRInputModule_XR_Update_Emotes(ref CVRInputModule_XR __instance) { - if (!MetaPort.Instance.isUsingVr) - { + if (!MetaPort.Instance.isUsingVr) return; - } - if (___steamVrIndexGestureToggle.stateDown && !____trackerManager.trackerNames.Contains("knuckles")) - { - isLocked = !isLocked; - oldGestureLeft = ____inputManager.gestureLeft; - oldGestureRight = ____inputManager.gestureRight; - CohtmlHud.Instance.ViewDropTextImmediate("", "Gesture Lock", "Gestures " + (isLocked ? "Locked" : "Unlocked")); - } - } + bool leftInput = _gestureToggleButton.GetLastStateDown(SteamVR_Input_Sources.LeftHand); + bool rightInput = _gestureToggleButton.GetLastStateDown(SteamVR_Input_Sources.RightHand); - [HarmonyPostfix] - [HarmonyPatch(typeof(CVRInputManager), nameof(CVRInputManager.Update))] - private static void Postfix_CVRInputManager_Update - ( - ref float ___gestureLeft, - ref float ___gestureRight - ) - { - if (!MetaPort.Instance.isUsingVr) - { + if (leftInput && __instance._leftModule.Type == EXRControllerType.Index || __instance._inputManager.oneHanded) return; + + if (rightInput && __instance._rightModule.Type == EXRControllerType.Index || __instance._inputManager.oneHanded) + return; + + if (leftInput || rightInput) + { + _isLocked = !_isLocked; + _oldGestureLeft = __instance._inputManager.gestureLeft; + _oldGestureRight = __instance._inputManager.gestureRight; + CohtmlHud.Instance.ViewDropTextImmediate("", "Gesture Lock", "Gestures " + (_isLocked ? "Locked" : "Unlocked")); } - if (isLocked) - { - // Dont override raw, other systems like the camera gesture recognizer need it. - ___gestureLeft = oldGestureLeft; - ___gestureRight = oldGestureRight; - } + if (!_isLocked) + return; + + __instance._inputManager.gestureLeft = _oldGestureLeft; + __instance._inputManager.gestureRight = _oldGestureRight; } } \ No newline at end of file diff --git a/GestureLock/Main.cs b/GestureLock/Main.cs index 78a1e86..6e9d0db 100644 --- a/GestureLock/Main.cs +++ b/GestureLock/Main.cs @@ -6,10 +6,10 @@ public class GestureLock : MelonMod { public override void OnInitializeMelon() { - ApplyPatches(typeof(HarmonyPatches.Patches)); + ApplyPatches(typeof(HarmonyPatches.CVRInputModule_XRPatches)); } - void ApplyPatches(Type type) + private void ApplyPatches(Type type) { try { diff --git a/GestureLock/Properties/AssemblyInfo.cs b/GestureLock/Properties/AssemblyInfo.cs index 9fb0a2f..3acb84d 100644 --- a/GestureLock/Properties/AssemblyInfo.cs +++ b/GestureLock/Properties/AssemblyInfo.cs @@ -20,10 +20,13 @@ using System.Reflection; [assembly: MelonGame("Alpha Blend Interactive", "ChilloutVR")] [assembly: MelonPlatform(MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonPlatformDomain(MelonPlatformDomainAttribute.CompatibleDomains.MONO)] +[assembly: MelonColor(255, 128, 66, 33)] +[assembly: MelonAuthorColor(255, 158, 21, 32)] +[assembly: HarmonyDontPatchAll] namespace NAK.GestureLock.Properties; internal static class AssemblyInfoParams { - public const string Version = "2.0.0"; + public const string Version = "2.0.1"; public const string Author = "NotAKidoS"; } \ No newline at end of file diff --git a/GestureLock/format.json b/GestureLock/format.json index ce3244d..23e5ce1 100644 --- a/GestureLock/format.json +++ b/GestureLock/format.json @@ -1,8 +1,8 @@ { "_id": 93, "name": "GestureLock", - "modversion": "2.0.0", - "gameversion": "2022r170p1", + "modversion": "2.0.1", + "gameversion": "2023r171", "loaderversion": "0.6.1", "modtype": "Mod", "author": "NotAKidoS", @@ -16,8 +16,8 @@ "requirements": [ "None" ], - "downloadlink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/releases/download/r3/GestureLock.dll", + "downloadlink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/releases/download/r16/GestureLock.dll", "sourcelink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/tree/main/GestureLock/", - "changelog": "- Simplification & refactor.", - "embedcolor": "804221" + "changelog": "- Fixes for 2023r171.", + "embedcolor": "#804221" } \ No newline at end of file