[PickupPushPull] Cleanup

This commit is contained in:
NotAKidoS 2023-08-14 18:54:18 -05:00
parent cf0ec02c01
commit 00f8393402
4 changed files with 21 additions and 57 deletions

View file

@ -10,15 +10,16 @@ internal class HarmonyPatches
{
//uses code from https://github.com/ljoonal/CVR-Plugins/tree/main/RotateIt
//GPL-3.0 license - Thank you ljoonal for being smart brain :plead:
[HarmonyPostfix]
[HarmonyPatch(typeof(CVRPickupObject), "Update")]
[HarmonyPatch(typeof(CVRPickupObject), nameof(CVRPickupObject.Update))]
public static void GrabbedObjectPatch(ref CVRPickupObject __instance)
{
// Need to only run when the object is grabbed by the local player
if (__instance._controllerRay == null) return;
if (__instance._controllerRay == null)
return;
//and only if its a prop we support
if (__instance.gripType == CVRPickupObject.GripType.Origin) return;
if (__instance.gripType == CVRPickupObject.GripType.Origin)
return;
Quaternion originalRotation = __instance.transform.rotation;
Transform referenceTransform = __instance._controllerRay.transform;
@ -26,7 +27,6 @@ internal class HarmonyPatches
__instance.transform.RotateAround(__instance.transform.position, referenceTransform.right, PickupPushPull_Module.Instance.objectRotation.y * Time.deltaTime);
__instance.transform.RotateAround(__instance.transform.position, referenceTransform.up, PickupPushPull_Module.Instance.objectRotation.x * Time.deltaTime);
// Add the new difference between the og rotation and our newly added rotation the the stored offset.
__instance.initialRotationalOffset *= Quaternion.Inverse(__instance.transform.rotation) * originalRotation;
}
}

View file

@ -1,33 +0,0 @@
using ABI_RC.Core.Savior;
using System.Reflection;
namespace NAK.PickupPushPull.InputModules.Info;
// Stolen from my scrapped Enhanced Input mod
internal class EI_SteamVR_Info
{
//General Inputs
internal static readonly FieldInfo im_vrMovementAction = typeof(InputModuleSteamVR).GetField("vrMovementAction", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrJumpAction = typeof(InputModuleSteamVR).GetField("vrJumpAction", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrLookAction = typeof(InputModuleSteamVR).GetField("vrLookAction", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrMuteAction = typeof(InputModuleSteamVR).GetField("vrMuteAction", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrMenuButton = typeof(InputModuleSteamVR).GetField("vrMenuButton", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrTriggerValue = typeof(InputModuleSteamVR).GetField("vrTriggerValue", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrGripValue = typeof(InputModuleSteamVR).GetField("vrGripValue", BindingFlags.NonPublic | BindingFlags.Instance);
//Vive Controllers
internal static readonly FieldInfo im_vrTouchPadValue = typeof(InputModuleSteamVR).GetField("vrTouchPadValue", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrTouchPadClick = typeof(InputModuleSteamVR).GetField("vrTouchPadClick", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_vrTouchPadTouch = typeof(InputModuleSteamVR).GetField("vrTouchPadTouch", BindingFlags.NonPublic | BindingFlags.Instance);
//Knuckles Controllers
internal static readonly FieldInfo im_steamVrIndexSkeletonLeft = typeof(InputModuleSteamVR).GetField("steamVrIndexSkeletonLeft", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_steamVrIndexSkeletonRight = typeof(InputModuleSteamVR).GetField("steamVrIndexSkeletonRight", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo im_steamVrIndexGestureToggle = typeof(InputModuleSteamVR).GetField("steamVrIndexGestureToggle", BindingFlags.NonPublic | BindingFlags.Instance);
//Touch Controllers
internal static readonly FieldInfo im_steamVrTriggerTouch = typeof(InputModuleSteamVR).GetField("steamVrTriggerTouch", BindingFlags.Public | BindingFlags.Instance);
internal static readonly FieldInfo im_steamVrGripTouch = typeof(InputModuleSteamVR).GetField("steamVrGripTouch", BindingFlags.Public | BindingFlags.Instance);
internal static readonly FieldInfo im_steamVrStickTouch = typeof(InputModuleSteamVR).GetField("steamVrStickTouch", BindingFlags.Public | BindingFlags.Instance);
internal static readonly FieldInfo im_steamVrButtonATouch = typeof(InputModuleSteamVR).GetField("steamVrButtonATouch", BindingFlags.Public | BindingFlags.Instance);
internal static readonly FieldInfo im_steamVrButtonBTouch = typeof(InputModuleSteamVR).GetField("steamVrButtonBTouch", BindingFlags.Public | BindingFlags.Instance);
//SteamVR Specific
//internal static readonly FieldInfo im_steamVrVibration = typeof(InputModuleSteamVR).GetField("steamVrVibration", BindingFlags.NonPublic | BindingFlags.Instance);
}

View file

@ -5,6 +5,7 @@ using ABI_RC.Core.Player;
using ABI_RC.Core.Savior;
using NAK.PickupPushPull.InputModules.Info;
using System.Reflection;
using ABI_RC.Systems.InputManagement;
using UnityEngine;
using UnityEngine.Events;
using Valve.VR;
@ -13,11 +14,6 @@ namespace NAK.PickupPushPull.InputModules;
public class PickupPushPull_Module : CVRInputModule
{
//Reflection shit
private static readonly FieldInfo _grabbedObject = typeof(ControllerRay).GetField("grabbedObject", BindingFlags.NonPublic | BindingFlags.Instance);
//Global stuff
public static PickupPushPull_Module Instance;
public Vector2 objectRotation = Vector2.zero;
//Global settings
@ -31,7 +27,7 @@ public class PickupPushPull_Module : CVRInputModule
//VR settings
public BindingOptionsVR.BindHand VR_RotateHand = BindingOptionsVR.BindHand.LeftHand;
public BindingOptionsVR.BindingOptions VR_RotateBind = BindingOptionsVR.BindingOptions.ButtonATouch;
private SteamVR_Action_Boolean VR_RotateBind_Boolean;
public SteamVR_Action_Boolean VR_RotateBind_Boolean;
//Local stuff
private ControllerRay desktopControllerRay;
@ -49,7 +45,6 @@ public class PickupPushPull_Module : CVRInputModule
public new void Start()
{
_inputManager = CVRInputManager.Instance;
Instance = this;
base.Start();
//Get desktop controller ray
@ -175,9 +170,10 @@ public class PickupPushPull_Module : CVRInputModule
private void DoSteamVRInput()
{
CVRPickupObject leftObject = (CVRPickupObject)_grabbedObject.GetValue(PlayerSetup.Instance.leftRay);
CVRPickupObject rightObject = (CVRPickupObject)_grabbedObject.GetValue(PlayerSetup.Instance.rightRay);
if (leftObject == null && rightObject == null) return;
CVRPickupObject leftObject = PlayerSetup.Instance.leftRay.grabbedObject;
CVRPickupObject rightObject = PlayerSetup.Instance.rightRay.grabbedObject;
if (leftObject == null && rightObject == null)
return;
bool canRotate = (leftObject != null && leftObject.gripType == CVRPickupObject.GripType.Free) ||
(rightObject != null && rightObject.gripType == CVRPickupObject.GripType.Free);
@ -191,10 +187,7 @@ public class PickupPushPull_Module : CVRInputModule
objectRotation.y += EntryRotationSpeed * rawLookVector.y * -1;
_inputManager.lookVector = Vector2.zero;
return;
}
CVRInputManager.Instance.objectPushPull += CVRInputManager.Instance.floatDirection * EntryPushPullSpeed * Time.deltaTime;
}
}

View file

@ -1,5 +1,6 @@
using ABI_RC.Core.Player;
using ABI_RC.Core.Savior;
using ABI_RC.Systems.InputManagement;
using MelonLoader;
using NAK.PickupPushPull.InputModules;
@ -31,6 +32,8 @@ public class PickupPushPull : MelonMod
public static readonly MelonPreferences_Entry<BindingOptionsVR.BindingOptions> EntryVRRotateBind =
Category.CreateEntry<BindingOptionsVR.BindingOptions>("VR Binding", BindingOptionsVR.BindingOptions.ButtonATouch);
public static PickupPushPull_Module _pushPullModule;
public override void OnInitializeMelon()
{
foreach (var entry in Category.Entries)
@ -43,16 +46,16 @@ public class PickupPushPull : MelonMod
MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer());
}
System.Collections.IEnumerator WaitForLocalPlayer()
private System.Collections.IEnumerator WaitForLocalPlayer()
{
while (PlayerSetup.Instance == null)
yield return null;
CVRInputManager.Instance.gameObject.AddComponent<PickupPushPull_Module>();
_pushPullModule = new PickupPushPull_Module();
CVRInputManager.Instance.AddInputModule(_pushPullModule);
//update BlackoutController settings after it initializes
while (PickupPushPull_Module.Instance == null)
while (_pushPullModule == null)
yield return null;
UpdateVRBinding();
@ -64,7 +67,8 @@ public class PickupPushPull : MelonMod
private void UpdateAllSettings()
{
if (!PickupPushPull_Module.Instance) return;
if (PickupPushPull_Module.Instance == null)
return;
//Global settings
PickupPushPull_Module.Instance.EntryPushPullSpeed = EntryPushPullSpeed.Value * 50;