From e6542f1d0fae10c21f3a4c1decdc8a70d168df71 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 9 Dec 2023 10:37:22 +0000 Subject: [PATCH] Improved weapon offhand grab logic --- .../jni/OpenJK/JKXR/VrInputDefault.cpp | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Projects/Android/jni/OpenJK/JKXR/VrInputDefault.cpp b/Projects/Android/jni/OpenJK/JKXR/VrInputDefault.cpp index 6181095..e1b9716 100644 --- a/Projects/Android/jni/OpenJK/JKXR/VrInputDefault.cpp +++ b/Projects/Android/jni/OpenJK/JKXR/VrInputDefault.cpp @@ -295,13 +295,34 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, if (offhandGripPushed) { if (!vr.weapon_stabilised && vr.item_selector == 0 && - !vr.misc_camera && !vr.cgzoommode) + !vr.misc_camera && !vr.cgzoommode && vr_two_handed_weapons->integer) { if (distance < STABILISATION_DISTANCE && - vr_two_handed_weapons->integer && - cl.frame.ps.weapon >= WP_SABER) { + cl.frame.ps.weapon == WP_SABER) { vr.weapon_stabilised = true; - } else { + } + else { + vec3_t dir, weaponposition, offhandposition; + VectorSet(weaponposition, pWeapon->Pose.position.z, pWeapon->Pose.position.x, pWeapon->Pose.position.y); + VectorSet(offhandposition, pOff->Pose.position.z, pOff->Pose.position.x, pOff->Pose.position.y); + VectorSubtract(weaponposition, offhandposition, dir); + VectorNormalize(dir); + + vec3_t weaponangles, weaponForward, rotation = { 0 }; + rotation[PITCH] = vr_weapon_pitchadjust->value; + QuatToYawPitchRoll(pWeapon->Pose.orientation, rotation, weaponangles); + AngleVectors(weaponangles, weaponForward, NULL, NULL); + VectorNormalize(weaponForward); + + if (cl.frame.ps.weapon > WP_SABER && + DotProduct(weaponForward, dir) > 0.8f) + { + vr.weapon_stabilised = true; + } + } + + if (!vr.weapon_stabilised) + { vr.item_selector = 2; } }