diff --git a/Projects/Android/jni/src/Lambda1VR/VrInput.h b/Projects/Android/jni/src/Lambda1VR/VrInput.h index 21125c5..f10446b 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInput.h +++ b/Projects/Android/jni/src/Lambda1VR/VrInput.h @@ -52,6 +52,8 @@ void HandleInput_OneController( ovrInputStateTrackedRemote *pDominantTrackedRemo bool stabiliseScope; void updateScopeAngles(float forwardYaw); +bool isBackpack(ovrTracking* pTracking); + char * g_pszBackpackWeapon; #endif //VRINPUT_H diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c b/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c index c3d904e..977e394 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c @@ -47,7 +47,7 @@ void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovr static bool selectingWeapon = false; static bool canUseQuickSave = false; - if (pOffTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pOffTracking)) { canUseQuickSave = false; } else if (!canUseQuickSave) { @@ -212,7 +212,7 @@ void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovr finishReloadNextFrame = false; } - if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pDominantTracking)) { canUseBackpack = false; } else if (!canUseBackpack && grabMeleeWeapon == 0) { @@ -232,7 +232,7 @@ void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovr if (grabMeleeWeapon == 0) { - if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pDominantTracking)) { if (dominantGripPushed) { dominantGripPushTime = GetTimeInMilliSeconds(); diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c b/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c index f42f1a1..75d495c 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c @@ -46,7 +46,7 @@ void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ov static float dominantGripPushTime = 0.0f; static bool canUseQuickSave = false; - if (pOffTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pOffTracking)) { canUseQuickSave = false; } else if (!canUseQuickSave) { @@ -223,7 +223,7 @@ void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ov finishReloadNextFrame = false; } - if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pDominantTracking)) { canUseBackpack = false; } else if (!canUseBackpack && grabMeleeWeapon == 0) { @@ -243,7 +243,7 @@ void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ov if (grabMeleeWeapon == 0) { - if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pDominantTracking)) { if (dominantGripPushed) { dominantGripPushTime = GetTimeInMilliSeconds(); diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c b/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c index f1d3b15..42cedb0 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c @@ -212,3 +212,31 @@ void updateScopeAngles(float forwardYaw) VectorSet(currentScopeAngles, -weaponangles[ADJUSTED][PITCH], weaponangles[ADJUSTED][YAW] - (forwardYaw+snapTurn), hmdorientation[ROLL]); } } + + +// Check if pTracking is within 0.4 of the HMD and in a 120 degree arc "behind" it +bool isBackpack(ovrTracking* pTracking) +{ + const ovrVector3f position = pTracking->HeadPose.Pose.Position; + double distanceFromHmd = sqrtf( + ((hmdPosition[0] - position.x) * (hmdPosition[0] - position.x)) + + ((hmdPosition[1] - position.y) * (hmdPosition[1] - position.y)) + + ((hmdPosition[2] - position.z) * (hmdPosition[2] - position.z)) + ); + + if(distanceFromHmd > 0.4){ + return false; + } + + double trackingAngle = atan2(hmdPosition[0] - position.x, hmdPosition[2] - position.z) * (180 / M_PI); + double angleFromHmd = trackingAngle - playerYaw; + + if(angleFromHmd > 180){ + angleFromHmd -= 360.0f; + } + else if(angleFromHmd < -180){ + angleFromHmd += 360.0f; + } + + return abs(angleFromHmd) > 120; +} \ No newline at end of file diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c b/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c index b1f763c..a3ccf3f 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c @@ -46,7 +46,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, static float dominantGripPushTime = 0.0f; static bool canUseQuickSave = false; - if (pOffTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pOffTracking)) { canUseQuickSave = false; } else if (!canUseQuickSave) { @@ -223,7 +223,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, finishReloadNextFrame = false; } - if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pDominantTracking)) { canUseBackpack = false; } else if (!canUseBackpack && grabMeleeWeapon == 0) { @@ -243,7 +243,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, if (grabMeleeWeapon == 0) { - if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pDominantTracking)) { if (dominantGripPushed) { dominantGripPushTime = GetTimeInMilliSeconds(); diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c b/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c index fa6f3d5..e7b1d1b 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c @@ -136,7 +136,7 @@ void HandleInput_OneController( ovrInputStateTrackedRemote *pDominantTrackedRemo dominantGripPushed = (pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) != 0; - if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) { + if (!isBackpack(pDominantTracking)) { if (dominantGripPushed) { dominantGripPushTime = GetTimeInMilliSeconds();