diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputLeft.c b/Projects/Android/jni/src/Lambda1VR/VrInputLeft.c index 1ee7201..6543361 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputLeft.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputLeft.c @@ -1,6 +1,6 @@ /************************************************************************************ -Filename : VrInputRight.c +Filename : VrInputLeft.c Content : Handles controller input for the left-handed Created : August 2019 Authors : Simon Brown @@ -294,12 +294,12 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) //Weapon Chooser static bool weaponSwitched = false; - if (between(-0.2f, leftTrackedRemoteState_new.Joystick.x, 0.2f) && - (between(0.8f, leftTrackedRemoteState_new.Joystick.y, 1.0f) || - between(-1.0f, leftTrackedRemoteState_new.Joystick.y, -0.8f))) + if (between(-0.25f, leftTrackedRemoteState_new.Joystick.x, 0.25f) && + (between(0.75f, leftTrackedRemoteState_new.Joystick.y, 1.0f) || + between(-1.0f, leftTrackedRemoteState_new.Joystick.y, -0.75f))) { if (!weaponSwitched) { - if (between(0.8f, leftTrackedRemoteState_new.Joystick.y, 1.0f)) + if (between(0.75f, leftTrackedRemoteState_new.Joystick.y, 1.0f)) { sendButtonActionSimple("invnext"); } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt.c b/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt.c index 413f5dc..1ea8cce 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt.c @@ -1,7 +1,7 @@ /************************************************************************************ -Filename : VrInputRightAlt.c -Content : Handles controller input for the left-handed alternative configuration #1 +Filename : VrInputLeftAlt.c +Content : Handles controller input for the left-handed Created : August 2019 Authors : Simon Brown @@ -29,15 +29,20 @@ extern cvar_t *cl_movespeedkey; void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx, float dy ); +float initialTouchX, initialTouchY; + + void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) { //Ensure handedness is set to left Cvar_Set("hand", "1"); - //Get info for tracked remotes - acquireTrackedRemotesData(Ovr, displayTime); + //Get info for tracked remotes + acquireTrackedRemotesData(Ovr, displayTime); static bool dominantGripPushed = false; + static int grabMeleeWeapon = 0; + static bool selectingWeapon = false; static float dominantGripPushTime = 0.0f; //Show screen view (if in multiplayer toggle scoreboard) @@ -59,7 +64,7 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) //Menu control - Uses "touch" if (useScreenLayer()) { - interactWithTouchScreen(&leftRemoteTracking_new, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old); + interactWithTouchScreen(&leftRemoteTracking_new, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old); } else { @@ -139,9 +144,9 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) float zxDist = length(x, z); if (zxDist != 0.0f && z != 0.0f) { - VectorSet(weaponangles[ADJUSTED], degrees(atanf(y / zxDist)), (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]) - degrees(atan2f(x, -z)), weaponangles[ADJUSTED][ROLL]); - VectorSet(weaponangles[UNADJUSTED], degrees(atanf(y / zxDist)), (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]) - degrees(atan2f(x, -z)), weaponangles[UNADJUSTED][ROLL]); - VectorSet(weaponangles[MELEE], degrees(atanf(y / zxDist)), (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]) - degrees(atan2f(x, -z)), weaponangles[MELEE][ROLL]); + VectorSet(weaponangles[ADJUSTED], degrees(atanf(y / zxDist)), (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]) - degrees(atan2f(x, -z)), weaponangles[ADJUSTED][ROLL]); + VectorSet(weaponangles[UNADJUSTED], degrees(atanf(y / zxDist)), (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]) - degrees(atan2f(x, -z)), weaponangles[UNADJUSTED][ROLL]); + VectorSet(weaponangles[MELEE], degrees(atanf(y / zxDist)), (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]) - degrees(atan2f(x, -z)), weaponangles[MELEE][ROLL]); } } else @@ -173,19 +178,34 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) if ((leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != (leftTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { - dominantGripPushed = (leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger); + dominantGripPushed = (leftTrackedRemoteState_new.Buttons & + ovrButton_GripTrigger) != 0; - if (dominantGripPushed) + if (grabMeleeWeapon == 0) { - dominantGripPushTime = GetTimeInMilliSeconds(); - } - else - { - if ((GetTimeInMilliSeconds() - dominantGripPushTime) < vr_reloadtimeoutms->integer) - { - sendButtonActionSimple("+reload"); - finishReloadNextFrame = true; + if (leftRemoteTracking_new.Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED) { + + if (dominantGripPushed) { + dominantGripPushTime = GetTimeInMilliSeconds(); + } else { + if ((GetTimeInMilliSeconds() - dominantGripPushTime) < + vr_reloadtimeoutms->integer) { + sendButtonActionSimple("+reload"); + finishReloadNextFrame = true; + } + } + } else{ + if (dominantGripPushed) { + //Initiate crowbar from backpack mode + sendButtonActionSimple("weapon_crowbar"); + Android_Vibrate(80, 0, 0.8); // vibrate to let user know they switched + grabMeleeWeapon = 1; + } } + } else if (grabMeleeWeapon == 1 && !dominantGripPushed) { + //Restores last used weapon + sendButtonActionSimple("lastinv"); + grabMeleeWeapon = 0; } } } @@ -225,7 +245,7 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) //This section corrects for the fact that the controller actually controls direction of movement, but we want to move relative to the direction the //player is facing for positional tracking float multiplier = vr_positional_factor->value / (cl_forwardspeed->value * - ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); + ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); vec2_t v; rotateAboutOrigin(-positionDeltaThisFrame[0] * multiplier, @@ -273,26 +293,59 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) sendButtonAction("+duck", (leftTrackedRemoteState_new.Buttons & ovrButton_X)); } - //Weapon Chooser - static bool weaponSwitched = false; - if (between(-0.2f, leftTrackedRemoteState_new.Joystick.x, 0.2f) && - (between(0.8f, leftTrackedRemoteState_new.Joystick.y, 1.0f) || - between(-1.0f, leftTrackedRemoteState_new.Joystick.y, -0.8f))) - { - if (!weaponSwitched) { - if (between(0.8f, leftTrackedRemoteState_new.Joystick.y, 1.0f)) - { - sendButtonActionSimple("invnext"); - } - else - { - sendButtonActionSimple("invprev"); - } - weaponSwitched = true; - } - } else { - weaponSwitched = false; - } + static bool sendUnAttackNextFrame = false; + if (sendUnAttackNextFrame) + { + sendUnAttackNextFrame = false; + sendButtonActionSimple("-attack"); + } + + //Weapon Chooser + static int scrollCount = 0; + if ((rightTrackedRemoteState_new.Buttons & ovrButton_B) != + (rightTrackedRemoteState_old.Buttons & ovrButton_B)) { + + selectingWeapon = (rightTrackedRemoteState_new.Buttons & ovrButton_B) > 0; + if (selectingWeapon) + { + scrollCount++; + sendButtonActionSimple("invnext"); + } else{ + if (scrollCount == 0) + { + sendButtonActionSimple("cancelselect"); + } else{ + sendUnAttackNextFrame = true; + sendButtonActionSimple("+attack"); + } + scrollCount = 0; + } + } + + //right and left on left controller + static bool weaponSwitched = false; + if (selectingWeapon) + { + if (between(0.4f, leftTrackedRemoteState_new.Joystick.x, 1.0f) || + between(-1.0f, leftTrackedRemoteState_new.Joystick.x, -0.4f)) + { + if (!weaponSwitched) { + if (between(0.4f, leftTrackedRemoteState_new.Joystick.x, 1.0f)) + { + scrollCount++; + sendButtonActionSimple("invnext"); + } + else + { + scrollCount--; + sendButtonActionSimple("invprev"); + } + weaponSwitched = true; + } + } else { + weaponSwitched = false; + } + } } //Left-hand specific stuff @@ -346,46 +399,41 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) &rightTrackedRemoteState_old, ovrButton_Trigger, K_SHIFT); - static increaseSnap = true; - if (leftTrackedRemoteState_new.Joystick.x > 0.6f) - { - if (increaseSnap) - { - snapTurn -= vr_snapturn_angle->value; - if (vr_snapturn_angle->value > 10.0f) { - increaseSnap = false; - } + if (!selectingWeapon) { + static bool increaseSnap = true; + if (leftTrackedRemoteState_new.Joystick.x > 0.6f) { + if (increaseSnap) { + snapTurn -= vr_snapturn_angle->value; + if (vr_snapturn_angle->value > 10.0f) { + increaseSnap = false; + } - if (snapTurn < -180.0f) - { - snapTurn += 360.f; - } - } - } else if (leftTrackedRemoteState_new.Joystick.x < 0.4f) { - increaseSnap = true; - } + if (snapTurn < -180.0f) { + snapTurn += 360.f; + } + } + } else if (leftTrackedRemoteState_new.Joystick.x < 0.4f) { + increaseSnap = true; + } - static decreaseSnap = true; - if (leftTrackedRemoteState_new.Joystick.x < -0.6f) - { - if (decreaseSnap) - { - snapTurn += vr_snapturn_angle->value; + static bool decreaseSnap = true; + if (leftTrackedRemoteState_new.Joystick.x < -0.6f) { + if (decreaseSnap) { + snapTurn += vr_snapturn_angle->value; - //If snap turn configured for less than 10 degrees - if (vr_snapturn_angle->value > 10.0f) { - decreaseSnap = false; - } + //If snap turn configured for less than 10 degrees + if (vr_snapturn_angle->value > 10.0f) { + decreaseSnap = false; + } - if (snapTurn > 180.0f) - { - snapTurn -= 360.f; - } - } - } else if (leftTrackedRemoteState_new.Joystick.x > -0.4f) - { - decreaseSnap = true; - } + if (snapTurn > 180.0f) { + snapTurn -= 360.f; + } + } + } else if (leftTrackedRemoteState_new.Joystick.x > -0.4f) { + decreaseSnap = true; + } + } } } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputRight.c b/Projects/Android/jni/src/Lambda1VR/VrInputRight.c index 18ed58f..5a2bf6a 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputRight.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputRight.c @@ -291,12 +291,12 @@ void HandleInput_Right(ovrMobile * Ovr, double displayTime ) //Weapon Chooser static bool weaponSwitched = false; - if (between(-0.2f, rightTrackedRemoteState_new.Joystick.x, 0.2f) && - (between(0.8f, rightTrackedRemoteState_new.Joystick.y, 1.0f) || - between(-1.0f, rightTrackedRemoteState_new.Joystick.y, -0.8f))) + if (between(-0.25f, rightTrackedRemoteState_new.Joystick.x, 0.25f) && + (between(0.75f, rightTrackedRemoteState_new.Joystick.y, 1.0f) || + between(-1.0f, rightTrackedRemoteState_new.Joystick.y, -0.75f))) { if (!weaponSwitched) { - if (between(0.8f, rightTrackedRemoteState_new.Joystick.y, 1.0f)) + if (between(0.75f, rightTrackedRemoteState_new.Joystick.y, 1.0f)) { sendButtonActionSimple("invnext"); } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputRightAlt.c b/Projects/Android/jni/src/Lambda1VR/VrInputRightAlt.c index ba8a3c7..d5957c7 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputRightAlt.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputRightAlt.c @@ -1,7 +1,7 @@ /************************************************************************************ Filename : VrInputRightAlt.c -Content : Handles controller input for the right-handed alternative configuration #1 +Content : Handles controller input for the right-handed Created : August 2019 Authors : Simon Brown @@ -31,32 +31,21 @@ void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) { - //Ensure handedness is set to right - Cvar_Set("hand", "0"); + //Ensure handedness is set to right + Cvar_Set("hand", "0"); //Get info for tracked remotes acquireTrackedRemotesData(Ovr, displayTime); - static bool dominantGripPushed = false; - static float dominantGripPushTime = 0.0f; + static bool dominantGripPushed = false; + static int grabMeleeWeapon = 0; + static bool selectingWeapon = false; + static float dominantGripPushTime = 0.0f; - //Show screen view (if in multiplayer toggle scoreboard) - if (((leftTrackedRemoteState_new.Buttons & ovrButton_Y) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Y)) && - (leftTrackedRemoteState_new.Buttons & ovrButton_Y)) { + //Menu button + handleTrackedControllerButton(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, ovrButton_Enter, K_ESCAPE); - showingScreenLayer = !showingScreenLayer; - - //Check we are in multiplayer - if (isMultiplayer()) { - sendButtonAction("+showscores", showingScreenLayer); - } - } - - //Menu button - handleTrackedControllerButton(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, ovrButton_Enter, K_ESCAPE); - - //Menu control - Uses "touch" + //Menu control - Uses "touch" if (useScreenLayer()) { interactWithTouchScreen(&rightRemoteTracking_new, &rightTrackedRemoteState_new, &rightTrackedRemoteState_old); @@ -76,50 +65,50 @@ void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) { if (distance < 0.50f) { - Cvar_Set2("vr_weapon_stabilised", "1", true); + Cvar_Set2("vr_weapon_stabilised", "1", true); } } else { - Cvar_Set2("vr_weapon_stabilised", "0", true); + Cvar_Set2("vr_weapon_stabilised", "0", true); } } //dominant hand stuff first { - ///Weapon location relative to view + ///Weapon location relative to view weaponoffset[0] = rightRemoteTracking_new.HeadPose.Pose.Position.x - hmdPosition[0]; weaponoffset[1] = rightRemoteTracking_new.HeadPose.Pose.Position.y - hmdPosition[1]; weaponoffset[2] = rightRemoteTracking_new.HeadPose.Pose.Position.z - hmdPosition[2]; - { - vec2_t v; - rotateAboutOrigin(weaponoffset[0], weaponoffset[2], -(cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]), v); - weaponoffset[0] = v[0]; - weaponoffset[2] = v[1]; + { + vec2_t v; + rotateAboutOrigin(weaponoffset[0], weaponoffset[2], -(cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]), v); + weaponoffset[0] = v[0]; + weaponoffset[2] = v[1]; ALOGV(" Weapon Offset: %f, %f, %f", weaponoffset[0], weaponoffset[1], weaponoffset[2]); - } + } //Weapon velocity - weaponvelocity[0] = rightRemoteTracking_new.HeadPose.LinearVelocity.x; - weaponvelocity[1] = rightRemoteTracking_new.HeadPose.LinearVelocity.y; - weaponvelocity[2] = rightRemoteTracking_new.HeadPose.LinearVelocity.z; + weaponvelocity[0] = rightRemoteTracking_new.HeadPose.LinearVelocity.x; + weaponvelocity[1] = rightRemoteTracking_new.HeadPose.LinearVelocity.y; + weaponvelocity[2] = rightRemoteTracking_new.HeadPose.LinearVelocity.z; - { - vec2_t v; - rotateAboutOrigin(weaponvelocity[0], weaponvelocity[2], -cl.refdef.cl_viewangles[YAW], v); - weaponvelocity[0] = v[0]; - weaponvelocity[2] = v[1]; + { + vec2_t v; + rotateAboutOrigin(weaponvelocity[0], weaponvelocity[2], -cl.refdef.cl_viewangles[YAW], v); + weaponvelocity[0] = v[0]; + weaponvelocity[2] = v[1]; ALOGV(" Weapon Velocity: %f, %f, %f", weaponvelocity[0], weaponvelocity[1], weaponvelocity[2]); - } + } //Set gun angles - We need to calculate all those we might need (including adjustments) for the client to then take its pick @@ -158,7 +147,7 @@ void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) //Use (Action) if ((rightTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (rightTrackedRemoteState_old.Buttons & ovrButton_Joystick)) { + (rightTrackedRemoteState_old.Buttons & ovrButton_Joystick)) { sendButtonAction("+use", (rightTrackedRemoteState_new.Buttons & ovrButton_Joystick)); } @@ -173,19 +162,34 @@ void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) if ((rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != (rightTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { - dominantGripPushed = (rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger); + dominantGripPushed = (rightTrackedRemoteState_new.Buttons & + ovrButton_GripTrigger) != 0; - if (dominantGripPushed) + if (grabMeleeWeapon == 0) { - dominantGripPushTime = GetTimeInMilliSeconds(); - } - else - { - if ((GetTimeInMilliSeconds() - dominantGripPushTime) < vr_reloadtimeoutms->integer) - { - sendButtonActionSimple("+reload"); - finishReloadNextFrame = true; + if (rightRemoteTracking_new.Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED) { + + if (dominantGripPushed) { + dominantGripPushTime = GetTimeInMilliSeconds(); + } else { + if ((GetTimeInMilliSeconds() - dominantGripPushTime) < + vr_reloadtimeoutms->integer) { + sendButtonActionSimple("+reload"); + finishReloadNextFrame = true; + } + } + } else{ + if (dominantGripPushed) { + //Initiate crowbar from backpack mode + sendButtonActionSimple("weapon_crowbar"); + Android_Vibrate(80, 1, 0.8); // vibrate to let user know they switched + grabMeleeWeapon = 1; + } } + } else if (grabMeleeWeapon == 1 && !dominantGripPushed) { + //Restores last used weapon + sendButtonActionSimple("lastinv"); + grabMeleeWeapon = 0; } } } @@ -197,35 +201,35 @@ void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) flashlightoffset[1] = leftRemoteTracking_new.HeadPose.Pose.Position.y - hmdPosition[1]; flashlightoffset[2] = leftRemoteTracking_new.HeadPose.Pose.Position.z - hmdPosition[2]; - vec2_t v; - rotateAboutOrigin(flashlightoffset[0], flashlightoffset[2], -(cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]), v); - flashlightoffset[0] = v[0]; - flashlightoffset[2] = v[1]; + vec2_t v; + rotateAboutOrigin(flashlightoffset[0], flashlightoffset[2], -(cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]), v); + flashlightoffset[0] = v[0]; + flashlightoffset[2] = v[1]; QuatToYawPitchRoll(leftRemoteTracking_new.HeadPose.Pose.Orientation, 15.0f, flashlightangles); flashlightangles[YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); - if (vr_walkdirection->integer == 0) { - controllerYawHeading = -cl.refdef.cl_viewangles[YAW] + flashlightangles[YAW]; - } - else - { - controllerYawHeading = 0.0f;//-cl.refdef.cl_viewangles[YAW]; - } + if (vr_walkdirection->integer == 0) { + controllerYawHeading = -cl.refdef.cl_viewangles[YAW] + flashlightangles[YAW]; + } + else + { + controllerYawHeading = 0.0f;//-cl.refdef.cl_viewangles[YAW]; + } } //Right-hand specific stuff { ALOGV(" Right-Controller-Position: %f, %f, %f", rightRemoteTracking_new.HeadPose.Pose.Position.x, - rightRemoteTracking_new.HeadPose.Pose.Position.y, - rightRemoteTracking_new.HeadPose.Pose.Position.z); + rightRemoteTracking_new.HeadPose.Pose.Position.y, + rightRemoteTracking_new.HeadPose.Pose.Position.z); //This section corrects for the fact that the controller actually controls direction of movement, but we want to move relative to the direction the //player is facing for positional tracking float multiplier = vr_positional_factor->value / (cl_forwardspeed->value * - ((leftTrackedRemoteState_new.Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); + ((leftTrackedRemoteState_new.Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); vec2_t v; rotateAboutOrigin(-positionDeltaThisFrame[0] * multiplier, @@ -245,25 +249,25 @@ void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) //in meantime, then it wouldn't stop the gun firing and it would get stuck static bool firingPrimary = false; - if (!firingPrimary && dominantGripPushed && (GetTimeInMilliSeconds() - dominantGripPushTime) > vr_reloadtimeoutms->integer) - { - //Fire Secondary - if ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) != - (rightTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { + if (!firingPrimary && dominantGripPushed && (GetTimeInMilliSeconds() - dominantGripPushTime) > vr_reloadtimeoutms->integer) + { + //Fire Secondary + if ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) != + (rightTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { - sendButtonAction("+attack2", (rightTrackedRemoteState_new.Buttons & ovrButton_Trigger)); - } - } - else - { - //Fire Primary - if ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) != - (rightTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { + sendButtonAction("+attack2", (rightTrackedRemoteState_new.Buttons & ovrButton_Trigger)); + } + } + else + { + //Fire Primary + if ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) != + (rightTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { - firingPrimary = (rightTrackedRemoteState_new.Buttons & ovrButton_Trigger); - sendButtonAction("+attack", firingPrimary); - } - } + firingPrimary = (rightTrackedRemoteState_new.Buttons & ovrButton_Trigger); + sendButtonAction("+attack", firingPrimary); + } + } //Duck with A if ((rightTrackedRemoteState_new.Buttons & ovrButton_A) != @@ -273,51 +277,85 @@ void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) sendButtonAction("+duck", (rightTrackedRemoteState_new.Buttons & ovrButton_A)); } - //Weapon Chooser - static bool weaponSwitched = false; - if (between(-0.2f, rightTrackedRemoteState_new.Joystick.x, 0.2f) && - (between(0.8f, rightTrackedRemoteState_new.Joystick.y, 1.0f) || - between(-1.0f, rightTrackedRemoteState_new.Joystick.y, -0.8f))) - { - if (!weaponSwitched) { - if (between(0.8f, rightTrackedRemoteState_new.Joystick.y, 1.0f)) - { - sendButtonActionSimple("invnext"); - } - else - { - sendButtonActionSimple("invprev"); - } - weaponSwitched = true; - } - } else { - weaponSwitched = false; - } + + static bool sendUnAttackNextFrame = false; + if (sendUnAttackNextFrame) + { + sendUnAttackNextFrame = false; + sendButtonActionSimple("-attack"); + } + + //Weapon Chooser + static int scrollCount = 0; + if ((leftTrackedRemoteState_new.Buttons & ovrButton_Y) != + (leftTrackedRemoteState_old.Buttons & ovrButton_Y)) { + + selectingWeapon = (leftTrackedRemoteState_new.Buttons & ovrButton_Y) > 0; + if (selectingWeapon) + { + scrollCount++; + sendButtonActionSimple("invnext"); + } else{ + if (scrollCount == 0) + { + sendButtonActionSimple("cancelselect"); + } else{ + sendUnAttackNextFrame = true; + sendButtonActionSimple("+attack"); + } + scrollCount = 0; + } + } + + //Left and right on right controller + static bool weaponSwitched = false; + if (selectingWeapon) + { + if (between(0.4f, rightTrackedRemoteState_new.Joystick.x, 1.0f) || + between(-1.0f, rightTrackedRemoteState_new.Joystick.x, -0.4f)) + { + if (!weaponSwitched) { + if (between(0.4f, rightTrackedRemoteState_new.Joystick.x, 1.0f)) + { + scrollCount++; + sendButtonActionSimple("invnext"); + } + else + { + scrollCount--; + sendButtonActionSimple("invprev"); + } + weaponSwitched = true; + } + } else { + weaponSwitched = false; + } + } } //Left-hand specific stuff { ALOGV(" Left-Controller-Position: %f, %f, %f", leftRemoteTracking_new.HeadPose.Pose.Position.x, - leftRemoteTracking_new.HeadPose.Pose.Position.y, - leftRemoteTracking_new.HeadPose.Pose.Position.z); + leftRemoteTracking_new.HeadPose.Pose.Position.y, + leftRemoteTracking_new.HeadPose.Pose.Position.z); - //Use (Action) - if ((leftTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Joystick) - && (leftTrackedRemoteState_new.Buttons & ovrButton_Joystick)) { + //Use (Action) + if ((leftTrackedRemoteState_new.Buttons & ovrButton_Joystick) != + (leftTrackedRemoteState_old.Buttons & ovrButton_Joystick) + && (leftTrackedRemoteState_new.Buttons & ovrButton_Joystick)) { - Cvar_SetFloat("vr_lasersight", 1.0f - vr_lasersight->value); + Cvar_SetFloat("vr_lasersight", 1.0f - vr_lasersight->value); - } + } - //Apply a filter and quadratic scaler so small movements are easier to make - float dist = length(leftTrackedRemoteState_new.Joystick.x, leftTrackedRemoteState_new.Joystick.y); - float nlf = nonLinearFilter(dist); + //Apply a filter and quadratic scaler so small movements are easier to make + float dist = length(leftTrackedRemoteState_new.Joystick.x, leftTrackedRemoteState_new.Joystick.y); + float nlf = nonLinearFilter(dist); float x = nlf * leftTrackedRemoteState_new.Joystick.x; float y = nlf * leftTrackedRemoteState_new.Joystick.y; - //Adjust to be off-hand controller oriented + //Adjust to be off-hand controller oriented vec2_t v; rotateAboutOrigin(x, y, controllerYawHeading, v); @@ -334,63 +372,58 @@ void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) (leftTrackedRemoteState_old.Buttons & ovrButton_X)) && (leftTrackedRemoteState_old.Buttons & ovrButton_X)) { sendButtonActionSimple("impulse 100"); -/* + #ifndef NDEBUG - Cbuf_AddText( "sv_cheats 1\n" ); - Cbuf_AddText( "impulse 101\n" ); + Cbuf_AddText( "sv_cheats 1\n" ); + Cbuf_AddText( "impulse 101\n" ); #endif -*/ } + } //We need to record if we have started firing primary so that releasing trigger will stop definitely firing, if user has pushed grip //in meantime, then it wouldn't stop the gun firing and it would get stuck static bool firingPrimary = false; - //Run - handleTrackedControllerButton(&leftTrackedRemoteState_new, - &leftTrackedRemoteState_old, - ovrButton_Trigger, K_SHIFT); + //Run + handleTrackedControllerButton(&leftTrackedRemoteState_new, + &leftTrackedRemoteState_old, + ovrButton_Trigger, K_SHIFT); - static increaseSnap = true; - if (rightTrackedRemoteState_new.Joystick.x > 0.6f) - { - if (increaseSnap) - { - snapTurn -= vr_snapturn_angle->value; - if (vr_snapturn_angle->value > 10.0f) { - increaseSnap = false; - } + if (!selectingWeapon) { + static bool increaseSnap = true; + if (rightTrackedRemoteState_new.Joystick.x > 0.6f) { + if (increaseSnap) { + snapTurn -= vr_snapturn_angle->value; + if (vr_snapturn_angle->value > 10.0f) { + increaseSnap = false; + } - if (snapTurn < -180.0f) - { - snapTurn += 360.f; + if (snapTurn < -180.0f) { + snapTurn += 360.f; + } } + } else if (rightTrackedRemoteState_new.Joystick.x < 0.4f) { + increaseSnap = true; } - } else if (rightTrackedRemoteState_new.Joystick.x < 0.4f) { - increaseSnap = true; - } - static decreaseSnap = true; - if (rightTrackedRemoteState_new.Joystick.x < -0.6f) - { - if (decreaseSnap) - { - snapTurn += vr_snapturn_angle->value; + static bool decreaseSnap = true; + if (rightTrackedRemoteState_new.Joystick.x < -0.6f) { + if (decreaseSnap) { + snapTurn += vr_snapturn_angle->value; - //If snap turn configured for less than 10 degrees - if (vr_snapturn_angle->value > 10.0f) { - decreaseSnap = false; + //If snap turn configured for less than 10 degrees + if (vr_snapturn_angle->value > 10.0f) { + decreaseSnap = false; + } + + if (snapTurn > 180.0f) { + snapTurn -= 360.f; + } } - - if (snapTurn > 180.0f) - { - snapTurn -= 360.f; - } - } - } else if (rightTrackedRemoteState_new.Joystick.x > -0.4f) - { - decreaseSnap = true; - } + } else if (rightTrackedRemoteState_new.Joystick.x > -0.4f) { + decreaseSnap = true; + } + } } }