diff --git a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c index 440ecd2..43ce011 100644 --- a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c +++ b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c @@ -111,8 +111,7 @@ enum control_scheme { RIGHT_HANDED_ALT = 1, LEFT_HANDED_DEFAULT = 10, LEFT_HANDED_ALT = 11, - LEFT_HANDED_ALT_2 = 12, - GAMEPAD = 20 //Not implemented, someone else can do this! + LEFT_HANDED_ALT_2 = 12 //Special case for left-handers who want the right handed button mappings / thumbsticks but left handed weapon / right handed flashlight }; /* @@ -1626,27 +1625,35 @@ void * AppThreadFunction( void * parm ) ALOGV(" HMD-Position: %f, %f, %f", positionHmd.x, positionHmd.y, positionHmd.z); + //Get info for tracked remotes + acquireTrackedRemotesData(appState.Ovr, appState.DisplayTime); + //Call additional control schemes here switch (vr_control_scheme->integer) { case RIGHT_HANDED_DEFAULT: - HandleInput_Right(appState.Ovr, appState.DisplayTime); + HandleInput_Default(&rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new, + &leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new, + ovrButton_A, ovrButton_B, ovrButton_X, ovrButton_Y); break; case RIGHT_HANDED_ALT: - HandleInput_RightAlt(appState.Ovr, appState.DisplayTime); + HandleInput_Alt(&rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new, + &leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new, + ovrButton_A, ovrButton_B, ovrButton_X, ovrButton_Y); break; case LEFT_HANDED_DEFAULT: - HandleInput_Left(appState.Ovr, appState.DisplayTime); + HandleInput_Default(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new, + &rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new, + ovrButton_X, ovrButton_Y, ovrButton_A, ovrButton_B); break; case LEFT_HANDED_ALT: - HandleInput_LeftAlt(appState.Ovr, appState.DisplayTime); + HandleInput_Alt(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new, + &rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new, + ovrButton_X, ovrButton_Y, ovrButton_A, ovrButton_B); break; case LEFT_HANDED_ALT_2: - HandleInput_LeftAlt2(appState.Ovr, appState.DisplayTime); + HandleInput_LeftAlt2( ); break; - case GAMEPAD: - //HandleInput_Gamepad(appState.Ovr, appState.DisplayTime); // Someone else can implement this - break; } static bool usingScreenLayer = true; //Starts off using the screen layer diff --git a/Projects/Android/jni/src/Lambda1VR/VrInput.h b/Projects/Android/jni/src/Lambda1VR/VrInput.h index f29bd99..e7f1829 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInput.h +++ b/Projects/Android/jni/src/Lambda1VR/VrInput.h @@ -27,10 +27,16 @@ void interactWithTouchScreen(ovrTracking *tracking, ovrInputStateTrackedRemote * void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime); -void HandleInput_Right( ovrMobile * Ovr, double displayTime ); -void HandleInput_RightAlt( ovrMobile * Ovr, double displayTime ); -void HandleInput_Left( ovrMobile * Ovr, double displayTime ); -void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ); -void HandleInput_LeftAlt2( ovrMobile * Ovr, double displayTime ); + +void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, + ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking, + int domButton1, int domButton2, int offButton1, int offButton2 ); +void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, + ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking, + int domButton1, int domButton2, int offButton1, int offButton2 ); + +//A specific custom for left alt 2 +void HandleInput_LeftAlt2( ); + diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt.c b/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c similarity index 51% rename from Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt.c rename to Projects/Android/jni/src/Lambda1VR/VrInputAlt.c index 5638288..8132b3e 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c @@ -1,7 +1,7 @@ /************************************************************************************ -Filename : VrInputLeftAlt.c -Content : Handles controller input for the left-handed +Filename : VrInputDefault.c +Content : Handles default controller input Created : August 2019 Authors : Simon Brown @@ -32,52 +32,39 @@ void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx float initialTouchX, initialTouchY; -void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) +void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, + ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking, + int domButton1, int domButton2, int offButton1, int offButton2 ) { - //Ensure handedness is set to left - Cvar_Set("hand", "1"); - - //Get info for tracked remotes - acquireTrackedRemotesData(Ovr, displayTime); + //Ensure handedness is set correctly + const char* pszHand = (vr_control_scheme->integer >= 10) ? "1" : "0"; + Cvar_Set("hand", pszHand); static bool dominantGripPushed = false; static int grabMeleeWeapon = 0; - static bool selectingWeapon = false; static float dominantGripPushTime = 0.0f; + static bool selectingWeapon = false; - //Show screen view (if in multiplayer toggle scoreboard) - if (((rightTrackedRemoteState_new.Buttons & ovrButton_B) != - (rightTrackedRemoteState_old.Buttons & ovrButton_B)) && - (rightTrackedRemoteState_new.Buttons & ovrButton_B)) { - - showingScreenLayer = !showingScreenLayer; - - //Check we are in multiplayer - if (isMultiplayer()) { - sendButtonAction("+showscores", showingScreenLayer); - } - } - - //Menu button + //Menu button - always on the left controller handleTrackedControllerButton(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, ovrButton_Enter, K_ESCAPE); //Menu control - Uses "touch" if (useScreenLayer()) { - interactWithTouchScreen(&leftRemoteTracking_new, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old); + interactWithTouchScreen(pDominantTracking, pDominantTrackedRemoteNew, pDominantTrackedRemoteOld); } else { //If distance to off-hand remote is less than 35cm and user pushes grip, then we enable weapon stabilisation - float distance = sqrtf(powf(rightRemoteTracking_new.HeadPose.Pose.Position.x - leftRemoteTracking_new.HeadPose.Pose.Position.x, 2) + - powf(rightRemoteTracking_new.HeadPose.Pose.Position.y - leftRemoteTracking_new.HeadPose.Pose.Position.y, 2) + - powf(rightRemoteTracking_new.HeadPose.Pose.Position.z - leftRemoteTracking_new.HeadPose.Pose.Position.z, 2)); + float distance = sqrtf(powf(pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x, 2) + + powf(pOffTracking->HeadPose.Pose.Position.y - pDominantTracking->HeadPose.Pose.Position.y, 2) + + powf(pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z, 2)); //Turn on weapon stabilisation? - if ((rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (rightTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { + if ((pOffTrackedRemoteNew->Buttons & ovrButton_GripTrigger) != + (pOffTrackedRemoteOld->Buttons & ovrButton_GripTrigger)) { - if (rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) + if (pOffTrackedRemoteNew->Buttons & ovrButton_GripTrigger) { if (distance < 0.50f) { @@ -93,9 +80,9 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) //dominant hand stuff first { ///Weapon location relative to view - weaponoffset[0] = leftRemoteTracking_new.HeadPose.Pose.Position.x - hmdPosition[0]; - weaponoffset[1] = leftRemoteTracking_new.HeadPose.Pose.Position.y - hmdPosition[1]; - weaponoffset[2] = leftRemoteTracking_new.HeadPose.Pose.Position.z - hmdPosition[2]; + weaponoffset[0] = pDominantTracking->HeadPose.Pose.Position.x - hmdPosition[0]; + weaponoffset[1] = pDominantTracking->HeadPose.Pose.Position.y - hmdPosition[1]; + weaponoffset[2] = pDominantTracking->HeadPose.Pose.Position.z - hmdPosition[2]; { vec2_t v; @@ -110,9 +97,9 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) } //Weapon velocity - weaponvelocity[0] = leftRemoteTracking_new.HeadPose.LinearVelocity.x; - weaponvelocity[1] = leftRemoteTracking_new.HeadPose.LinearVelocity.y; - weaponvelocity[2] = leftRemoteTracking_new.HeadPose.LinearVelocity.z; + weaponvelocity[0] = pDominantTracking->HeadPose.LinearVelocity.x; + weaponvelocity[1] = pDominantTracking->HeadPose.LinearVelocity.y; + weaponvelocity[2] = pDominantTracking->HeadPose.LinearVelocity.z; { vec2_t v; @@ -128,7 +115,7 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) //Set gun angles - const ovrQuatf quatRemote = leftRemoteTracking_new.HeadPose.Pose.Orientation; + const ovrQuatf quatRemote = pDominantTracking->HeadPose.Pose.Orientation; QuatToYawPitchRoll(quatRemote, vr_weapon_pitchadjust->value, weaponangles[ADJUSTED]); QuatToYawPitchRoll(quatRemote, 0.0f, weaponangles[UNADJUSTED]); QuatToYawPitchRoll(quatRemote, -30.0f, weaponangles[MELEE]); @@ -138,15 +125,15 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) //Don't trigger stabilisation if controllers are close together (holding Glock for example) (distance > 0.15f)) { - float z = rightRemoteTracking_new.HeadPose.Pose.Position.z - leftRemoteTracking_new.HeadPose.Pose.Position.z; - float x = rightRemoteTracking_new.HeadPose.Pose.Position.x - leftRemoteTracking_new.HeadPose.Pose.Position.x; - float y = rightRemoteTracking_new.HeadPose.Pose.Position.y - leftRemoteTracking_new.HeadPose.Pose.Position.y; + float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z; + float x = pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x; + float y = pOffTracking->HeadPose.Pose.Position.y - pDominantTracking->HeadPose.Pose.Position.y; 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 @@ -162,10 +149,10 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) } //Use (Action) - if ((leftTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Joystick)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)) { - sendButtonAction("+use", (leftTrackedRemoteState_new.Buttons & ovrButton_Joystick)); + sendButtonAction("+use", (pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick)); } static bool finishReloadNextFrame = false; @@ -175,15 +162,15 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) finishReloadNextFrame = false; } - if ((leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_GripTrigger)) { - dominantGripPushed = (leftTrackedRemoteState_new.Buttons & + dominantGripPushed = (pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) != 0; if (grabMeleeWeapon == 0) { - if (leftRemoteTracking_new.Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED) { + if (pDominantTracking->Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED) { if (dominantGripPushed) { dominantGripPushTime = GetTimeInMilliSeconds(); @@ -198,7 +185,8 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) if (dominantGripPushed) { //Initiate crowbar from backpack mode sendButtonActionSimple("weapon_crowbar"); - Android_Vibrate(80, 0, 0.8); // vibrate to let user know they switched + int channel = (vr_control_scheme->integer >= 10) ? 0 : 1; + Android_Vibrate(80, channel, 0.8); // vibrate to let user know they switched grabMeleeWeapon = 1; } } @@ -213,16 +201,16 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) float controllerYawHeading = 0.0f; //off-hand stuff { - flashlightoffset[0] = rightRemoteTracking_new.HeadPose.Pose.Position.x - hmdPosition[0]; - flashlightoffset[1] = rightRemoteTracking_new.HeadPose.Pose.Position.y - hmdPosition[1]; - flashlightoffset[2] = rightRemoteTracking_new.HeadPose.Pose.Position.z - hmdPosition[2]; + flashlightoffset[0] = pOffTracking->HeadPose.Pose.Position.x - hmdPosition[0]; + flashlightoffset[1] = pOffTracking->HeadPose.Pose.Position.y - hmdPosition[1]; + flashlightoffset[2] = pOffTracking->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]; - QuatToYawPitchRoll(rightRemoteTracking_new.HeadPose.Pose.Orientation, 15.0f, flashlightangles); + QuatToYawPitchRoll(pOffTracking->HeadPose.Pose.Orientation, 15.0f, flashlightangles); flashlightangles[YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); @@ -235,18 +223,13 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) } } - //Right-hand specific stuff { - ALOGV(" Right-Controller-Position: %f, %f, %f", - leftRemoteTracking_new.HeadPose.Pose.Position.x, - leftRemoteTracking_new.HeadPose.Pose.Position.y, - leftRemoteTracking_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 * - ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); + ((pOffTrackedRemoteNew->Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); + //If player is ducked then multiply by 3 otherwise positional tracking feels very wrong if (ducked != DUCK_NOTDUCKED) { multiplier *= 3.0f; @@ -262,9 +245,9 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) positional_movementSideways, positional_movementForward); - //Jump (Y Button) - handleTrackedControllerButton(&leftTrackedRemoteState_new, - &leftTrackedRemoteState_old, ovrButton_Y, K_SPACE); + //Jump + handleTrackedControllerButton(pDominantTrackedRemoteNew, + pDominantTrackedRemoteOld, domButton2, K_SPACE); //We need to record if we have started firing primary so that releasing trigger will stop firing, if user has pushed grip //in meantime, then it wouldn't stop the gun firing and it would get stuck @@ -273,44 +256,44 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) if (!firingPrimary && dominantGripPushed && (GetTimeInMilliSeconds() - dominantGripPushTime) > vr_reloadtimeoutms->integer) { //Fire Secondary - if ((leftTrackedRemoteState_new.Buttons & ovrButton_Trigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) { - sendButtonAction("+attack2", (leftTrackedRemoteState_new.Buttons & ovrButton_Trigger)); + sendButtonAction("+attack2", (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger)); } } else { //Fire Primary - if ((leftTrackedRemoteState_new.Buttons & ovrButton_Trigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) { - firingPrimary = (leftTrackedRemoteState_new.Buttons & ovrButton_Trigger); + firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger); sendButtonAction("+attack", firingPrimary); } } - //Duck with X - if ((leftTrackedRemoteState_new.Buttons & ovrButton_X) != - (leftTrackedRemoteState_old.Buttons & ovrButton_X) && + //Duck + if ((pDominantTrackedRemoteNew->Buttons & domButton1) != + (pDominantTrackedRemoteOld->Buttons & domButton1) && ducked != DUCK_CROUCHED) { - ducked = (leftTrackedRemoteState_new.Buttons & ovrButton_X) ? DUCK_BUTTON : DUCK_NOTDUCKED; - sendButtonAction("+duck", (leftTrackedRemoteState_new.Buttons & ovrButton_X)); + ducked = (pDominantTrackedRemoteNew->Buttons & domButton1) ? DUCK_BUTTON : DUCK_NOTDUCKED; + sendButtonAction("+duck", (pDominantTrackedRemoteNew->Buttons & domButton1)); } - static bool sendUnAttackNextFrame = false; - if (sendUnAttackNextFrame) - { - sendUnAttackNextFrame = false; - sendButtonActionSimple("-attack"); - } + 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)) { + if ((pOffTrackedRemoteNew->Buttons & offButton2) != + (pOffTrackedRemoteOld->Buttons & offButton2)) { - selectingWeapon = (rightTrackedRemoteState_new.Buttons & ovrButton_B) > 0; + selectingWeapon = (pOffTrackedRemoteNew->Buttons & offButton2) > 0; if (selectingWeapon) { scrollCount++; @@ -331,11 +314,11 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) 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 (between(0.4f, pDominantTrackedRemoteNew->Joystick.x, 1.0f) || + between(-1.0f, pDominantTrackedRemoteNew->Joystick.x, -0.4f)) { if (!weaponSwitched) { - if (between(0.4f, leftTrackedRemoteState_new.Joystick.x, 1.0f)) + if (between(0.4f, pDominantTrackedRemoteNew->Joystick.x, 1.0f)) { scrollCount++; sendButtonActionSimple("invnext"); @@ -353,27 +336,21 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) } } - //Left-hand specific stuff { - ALOGV(" Left-Controller-Position: %f, %f, %f", - rightRemoteTracking_new.HeadPose.Pose.Position.x, - rightRemoteTracking_new.HeadPose.Pose.Position.y, - rightRemoteTracking_new.HeadPose.Pose.Position.z); - //Use (Action) - if ((rightTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (rightTrackedRemoteState_old.Buttons & ovrButton_Joystick) - && (rightTrackedRemoteState_new.Buttons & ovrButton_Joystick)) { + if ((pOffTrackedRemoteNew->Buttons & ovrButton_Joystick) != + (pOffTrackedRemoteOld->Buttons & ovrButton_Joystick) + && (pOffTrackedRemoteNew->Buttons & ovrButton_Joystick)) { 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(rightTrackedRemoteState_new.Joystick.x, rightTrackedRemoteState_new.Joystick.y); + float dist = length(pOffTrackedRemoteNew->Joystick.x, pOffTrackedRemoteNew->Joystick.y); float nlf = nonLinearFilter(dist); - float x = nlf * rightTrackedRemoteState_new.Joystick.x; - float y = nlf * rightTrackedRemoteState_new.Joystick.y; + float x = nlf * pOffTrackedRemoteNew->Joystick.x; + float y = nlf * pOffTrackedRemoteNew->Joystick.y; player_moving = (fabs(x) + fabs(y)) > 0.01f; @@ -391,9 +368,9 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) //flashlight on/off - if (((rightTrackedRemoteState_new.Buttons & ovrButton_A) != - (rightTrackedRemoteState_old.Buttons & ovrButton_A)) && - (rightTrackedRemoteState_old.Buttons & ovrButton_A)) { + if (((pOffTrackedRemoteNew->Buttons & offButton1) != + (pOffTrackedRemoteOld->Buttons & offButton1)) && + (pOffTrackedRemoteOld->Buttons & offButton1)) { sendButtonActionSimple("impulse 100"); } @@ -403,45 +380,55 @@ void HandleInput_LeftAlt( ovrMobile * Ovr, double displayTime ) static bool firingPrimary = false; //Run - handleTrackedControllerButton(&rightTrackedRemoteState_new, - &rightTrackedRemoteState_old, + handleTrackedControllerButton(pOffTrackedRemoteNew, + pOffTrackedRemoteOld, ovrButton_Trigger, K_SHIFT); + static bool increaseSnap = true; 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 (pDominantTrackedRemoteNew->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 (pDominantTrackedRemoteNew->Joystick.x < 0.4f) + { + increaseSnap = true; + } - static bool decreaseSnap = true; - if (leftTrackedRemoteState_new.Joystick.x < -0.6f) { - if (decreaseSnap) { - snapTurn += vr_snapturn_angle->value; + static bool decreaseSnap = true; + if (pDominantTrackedRemoteNew->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 (pDominantTrackedRemoteNew->Joystick.x > -0.4f) + { + decreaseSnap = true; + } + } } } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputLeft.c b/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c similarity index 60% rename from Projects/Android/jni/src/Lambda1VR/VrInputLeft.c rename to Projects/Android/jni/src/Lambda1VR/VrInputDefault.c index 806b5f0..6b138bd 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputLeft.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c @@ -1,7 +1,7 @@ /************************************************************************************ -Filename : VrInputLeft.c -Content : Handles controller input for the left-handed +Filename : VrInputDefault.c +Content : Handles default controller input Created : August 2019 Authors : Simon Brown @@ -32,22 +32,22 @@ void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx float initialTouchX, initialTouchY; -void HandleInput_Left( ovrMobile * Ovr, double displayTime ) +void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, + ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking, + int domButton1, int domButton2, int offButton1, int offButton2 ) { - //Ensure handedness is set to left - Cvar_Set("hand", "1"); - - //Get info for tracked remotes - acquireTrackedRemotesData(Ovr, displayTime); + //Ensure handedness is set correctly + const char* pszHand = (vr_control_scheme->integer >= 10) ? "1" : "0"; + Cvar_Set("hand", pszHand); static bool dominantGripPushed = false; static int grabMeleeWeapon = 0; static float dominantGripPushTime = 0.0f; //Show screen view (if in multiplayer toggle scoreboard) - if (((rightTrackedRemoteState_new.Buttons & ovrButton_B) != - (rightTrackedRemoteState_old.Buttons & ovrButton_B)) && - (rightTrackedRemoteState_new.Buttons & ovrButton_B)) { + if (((pOffTrackedRemoteNew->Buttons & offButton2) != + (pOffTrackedRemoteOld->Buttons & offButton2)) && + (pOffTrackedRemoteNew->Buttons & offButton2)) { showingScreenLayer = !showingScreenLayer; @@ -57,26 +57,26 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) } } - //Menu button + //Menu button - always on the left controller handleTrackedControllerButton(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, ovrButton_Enter, K_ESCAPE); //Menu control - Uses "touch" if (useScreenLayer()) { - interactWithTouchScreen(&leftRemoteTracking_new, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old); + interactWithTouchScreen(pDominantTracking, pDominantTrackedRemoteNew, pDominantTrackedRemoteOld); } else { //If distance to off-hand remote is less than 35cm and user pushes grip, then we enable weapon stabilisation - float distance = sqrtf(powf(rightRemoteTracking_new.HeadPose.Pose.Position.x - leftRemoteTracking_new.HeadPose.Pose.Position.x, 2) + - powf(rightRemoteTracking_new.HeadPose.Pose.Position.y - leftRemoteTracking_new.HeadPose.Pose.Position.y, 2) + - powf(rightRemoteTracking_new.HeadPose.Pose.Position.z - leftRemoteTracking_new.HeadPose.Pose.Position.z, 2)); + float distance = sqrtf(powf(pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x, 2) + + powf(pOffTracking->HeadPose.Pose.Position.y - pDominantTracking->HeadPose.Pose.Position.y, 2) + + powf(pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z, 2)); //Turn on weapon stabilisation? - if ((rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (rightTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { + if ((pOffTrackedRemoteNew->Buttons & ovrButton_GripTrigger) != + (pOffTrackedRemoteOld->Buttons & ovrButton_GripTrigger)) { - if (rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) + if (pOffTrackedRemoteNew->Buttons & ovrButton_GripTrigger) { if (distance < 0.50f) { @@ -92,9 +92,9 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) //dominant hand stuff first { ///Weapon location relative to view - weaponoffset[0] = leftRemoteTracking_new.HeadPose.Pose.Position.x - hmdPosition[0]; - weaponoffset[1] = leftRemoteTracking_new.HeadPose.Pose.Position.y - hmdPosition[1]; - weaponoffset[2] = leftRemoteTracking_new.HeadPose.Pose.Position.z - hmdPosition[2]; + weaponoffset[0] = pDominantTracking->HeadPose.Pose.Position.x - hmdPosition[0]; + weaponoffset[1] = pDominantTracking->HeadPose.Pose.Position.y - hmdPosition[1]; + weaponoffset[2] = pDominantTracking->HeadPose.Pose.Position.z - hmdPosition[2]; { vec2_t v; @@ -109,9 +109,9 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) } //Weapon velocity - weaponvelocity[0] = leftRemoteTracking_new.HeadPose.LinearVelocity.x; - weaponvelocity[1] = leftRemoteTracking_new.HeadPose.LinearVelocity.y; - weaponvelocity[2] = leftRemoteTracking_new.HeadPose.LinearVelocity.z; + weaponvelocity[0] = pDominantTracking->HeadPose.LinearVelocity.x; + weaponvelocity[1] = pDominantTracking->HeadPose.LinearVelocity.y; + weaponvelocity[2] = pDominantTracking->HeadPose.LinearVelocity.z; { vec2_t v; @@ -127,7 +127,7 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) //Set gun angles - const ovrQuatf quatRemote = leftRemoteTracking_new.HeadPose.Pose.Orientation; + const ovrQuatf quatRemote = pDominantTracking->HeadPose.Pose.Orientation; QuatToYawPitchRoll(quatRemote, vr_weapon_pitchadjust->value, weaponangles[ADJUSTED]); QuatToYawPitchRoll(quatRemote, 0.0f, weaponangles[UNADJUSTED]); QuatToYawPitchRoll(quatRemote, -30.0f, weaponangles[MELEE]); @@ -137,9 +137,9 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) //Don't trigger stabilisation if controllers are close together (holding Glock for example) (distance > 0.15f)) { - float z = rightRemoteTracking_new.HeadPose.Pose.Position.z - leftRemoteTracking_new.HeadPose.Pose.Position.z; - float x = rightRemoteTracking_new.HeadPose.Pose.Position.x - leftRemoteTracking_new.HeadPose.Pose.Position.x; - float y = rightRemoteTracking_new.HeadPose.Pose.Position.y - leftRemoteTracking_new.HeadPose.Pose.Position.y; + float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z; + float x = pOffTracking->HeadPose.Pose.Position.x - pDominantTracking->HeadPose.Pose.Position.x; + float y = pOffTracking->HeadPose.Pose.Position.y - pDominantTracking->HeadPose.Pose.Position.y; float zxDist = length(x, z); if (zxDist != 0.0f && z != 0.0f) { @@ -161,10 +161,10 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) } //Use (Action) - if ((leftTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Joystick)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)) { - sendButtonAction("+use", (leftTrackedRemoteState_new.Buttons & ovrButton_Joystick)); + sendButtonAction("+use", (pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick)); } static bool finishReloadNextFrame = false; @@ -174,15 +174,15 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) finishReloadNextFrame = false; } - if ((leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_GripTrigger)) { - dominantGripPushed = (leftTrackedRemoteState_new.Buttons & + dominantGripPushed = (pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) != 0; if (grabMeleeWeapon == 0) { - if (leftRemoteTracking_new.Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED) { + if (pDominantTracking->Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED) { if (dominantGripPushed) { dominantGripPushTime = GetTimeInMilliSeconds(); @@ -197,7 +197,8 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) if (dominantGripPushed) { //Initiate crowbar from backpack mode sendButtonActionSimple("weapon_crowbar"); - Android_Vibrate(80, 0, 0.8); // vibrate to let user know they switched + int channel = (vr_control_scheme->integer >= 10) ? 0 : 1; + Android_Vibrate(80, channel, 0.8); // vibrate to let user know they switched grabMeleeWeapon = 1; } } @@ -212,16 +213,16 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) float controllerYawHeading = 0.0f; //off-hand stuff { - flashlightoffset[0] = rightRemoteTracking_new.HeadPose.Pose.Position.x - hmdPosition[0]; - flashlightoffset[1] = rightRemoteTracking_new.HeadPose.Pose.Position.y - hmdPosition[1]; - flashlightoffset[2] = rightRemoteTracking_new.HeadPose.Pose.Position.z - hmdPosition[2]; + flashlightoffset[0] = pOffTracking->HeadPose.Pose.Position.x - hmdPosition[0]; + flashlightoffset[1] = pOffTracking->HeadPose.Pose.Position.y - hmdPosition[1]; + flashlightoffset[2] = pOffTracking->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]; - QuatToYawPitchRoll(rightRemoteTracking_new.HeadPose.Pose.Orientation, 15.0f, flashlightangles); + QuatToYawPitchRoll(pOffTracking->HeadPose.Pose.Orientation, 15.0f, flashlightangles); flashlightangles[YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); @@ -234,18 +235,13 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) } } - //Right-hand specific stuff { - ALOGV(" Right-Controller-Position: %f, %f, %f", - leftRemoteTracking_new.HeadPose.Pose.Position.x, - leftRemoteTracking_new.HeadPose.Pose.Position.y, - leftRemoteTracking_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 * - ((rightTrackedRemoteState_new.Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); + ((pOffTrackedRemoteNew->Buttons & ovrButton_Trigger) ? cl_movespeedkey->value : 1.0f)); + //If player is ducked then multiply by 3 otherwise positional tracking feels very wrong if (ducked != DUCK_NOTDUCKED) { multiplier *= 3.0f; @@ -261,9 +257,9 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) positional_movementSideways, positional_movementForward); - //Jump (Y Button) - handleTrackedControllerButton(&leftTrackedRemoteState_new, - &leftTrackedRemoteState_old, ovrButton_Y, K_SPACE); + //Jump + handleTrackedControllerButton(pDominantTrackedRemoteNew, + pDominantTrackedRemoteOld, domButton2, K_SPACE); //We need to record if we have started firing primary so that releasing trigger will stop firing, if user has pushed grip //in meantime, then it wouldn't stop the gun firing and it would get stuck @@ -272,39 +268,39 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) if (!firingPrimary && dominantGripPushed && (GetTimeInMilliSeconds() - dominantGripPushTime) > vr_reloadtimeoutms->integer) { //Fire Secondary - if ((leftTrackedRemoteState_new.Buttons & ovrButton_Trigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) { - sendButtonAction("+attack2", (leftTrackedRemoteState_new.Buttons & ovrButton_Trigger)); + sendButtonAction("+attack2", (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger)); } } else { //Fire Primary - if ((leftTrackedRemoteState_new.Buttons & ovrButton_Trigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_Trigger)) { + if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) != + (pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) { - firingPrimary = (leftTrackedRemoteState_new.Buttons & ovrButton_Trigger); + firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger); sendButtonAction("+attack", firingPrimary); } } - //Duck with X - if ((leftTrackedRemoteState_new.Buttons & ovrButton_X) != - (leftTrackedRemoteState_old.Buttons & ovrButton_X) && + //Duck + if ((pDominantTrackedRemoteNew->Buttons & domButton1) != + (pDominantTrackedRemoteOld->Buttons & domButton1) && ducked != DUCK_CROUCHED) { - ducked = (leftTrackedRemoteState_new.Buttons & ovrButton_X) ? DUCK_BUTTON : DUCK_NOTDUCKED; - sendButtonAction("+duck", (leftTrackedRemoteState_new.Buttons & ovrButton_X)); + ducked = (pDominantTrackedRemoteNew->Buttons & domButton1) ? DUCK_BUTTON : DUCK_NOTDUCKED; + sendButtonAction("+duck", (pDominantTrackedRemoteNew->Buttons & domButton1)); } //Weapon Chooser static bool weaponSwitched = false; - 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 (between(-0.25f, pDominantTrackedRemoteNew->Joystick.x, 0.25f) && + (between(0.75f, pDominantTrackedRemoteNew->Joystick.y, 1.0f) || + between(-1.0f, pDominantTrackedRemoteNew->Joystick.y, -0.75f))) { if (!weaponSwitched) { - if (between(0.75f, leftTrackedRemoteState_new.Joystick.y, 1.0f)) + if (between(0.75f, pDominantTrackedRemoteNew->Joystick.y, 1.0f)) { sendButtonActionSimple("invnext"); } @@ -319,27 +315,21 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) } } - //Left-hand specific stuff { - ALOGV(" Left-Controller-Position: %f, %f, %f", - rightRemoteTracking_new.HeadPose.Pose.Position.x, - rightRemoteTracking_new.HeadPose.Pose.Position.y, - rightRemoteTracking_new.HeadPose.Pose.Position.z); - //Use (Action) - if ((rightTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (rightTrackedRemoteState_old.Buttons & ovrButton_Joystick) - && (rightTrackedRemoteState_new.Buttons & ovrButton_Joystick)) { + if ((pOffTrackedRemoteNew->Buttons & ovrButton_Joystick) != + (pOffTrackedRemoteOld->Buttons & ovrButton_Joystick) + && (pOffTrackedRemoteNew->Buttons & ovrButton_Joystick)) { 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(rightTrackedRemoteState_new.Joystick.x, rightTrackedRemoteState_new.Joystick.y); + float dist = length(pOffTrackedRemoteNew->Joystick.x, pOffTrackedRemoteNew->Joystick.y); float nlf = nonLinearFilter(dist); - float x = nlf * rightTrackedRemoteState_new.Joystick.x; - float y = nlf * rightTrackedRemoteState_new.Joystick.y; + float x = nlf * pOffTrackedRemoteNew->Joystick.x; + float y = nlf * pOffTrackedRemoteNew->Joystick.y; player_moving = (fabs(x) + fabs(y)) > 0.01f; @@ -357,9 +347,9 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) //flashlight on/off - if (((rightTrackedRemoteState_new.Buttons & ovrButton_A) != - (rightTrackedRemoteState_old.Buttons & ovrButton_A)) && - (rightTrackedRemoteState_old.Buttons & ovrButton_A)) { + if (((pOffTrackedRemoteNew->Buttons & offButton1) != + (pOffTrackedRemoteOld->Buttons & offButton1)) && + (pOffTrackedRemoteOld->Buttons & offButton1)) { sendButtonActionSimple("impulse 100"); } @@ -369,12 +359,12 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) static bool firingPrimary = false; //Run - handleTrackedControllerButton(&rightTrackedRemoteState_new, - &rightTrackedRemoteState_old, + handleTrackedControllerButton(pOffTrackedRemoteNew, + pOffTrackedRemoteOld, ovrButton_Trigger, K_SHIFT); static increaseSnap = true; - if (leftTrackedRemoteState_new.Joystick.x > 0.6f) + if (pDominantTrackedRemoteNew->Joystick.x > 0.6f) { if (increaseSnap) { @@ -388,12 +378,12 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) snapTurn += 360.f; } } - } else if (leftTrackedRemoteState_new.Joystick.x < 0.4f) { + } else if (pDominantTrackedRemoteNew->Joystick.x < 0.4f) { increaseSnap = true; } static decreaseSnap = true; - if (leftTrackedRemoteState_new.Joystick.x < -0.6f) + if (pDominantTrackedRemoteNew->Joystick.x < -0.6f) { if (decreaseSnap) { @@ -409,7 +399,7 @@ void HandleInput_Left( ovrMobile * Ovr, double displayTime ) snapTurn -= 360.f; } } - } else if (leftTrackedRemoteState_new.Joystick.x > -0.4f) + } else if (pDominantTrackedRemoteNew->Joystick.x > -0.4f) { decreaseSnap = true; } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt2.c b/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt2.c index 9fca41a..7cc2125 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt2.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputLeftAlt2.c @@ -29,13 +29,10 @@ extern cvar_t *cl_movespeedkey; void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx, float dy ); -void HandleInput_LeftAlt2(ovrMobile * Ovr, double displayTime ) +void HandleInput_LeftAlt2() { - //Ensure handedness is set to right - Cvar_Set("hand", "0"); - - //Get info for tracked remotes - acquireTrackedRemotesData(Ovr, displayTime); + //Ensure handedness is set to left + Cvar_Set("hand", "1"); static bool dominantGripPushed = false; static int grabMeleeWeapon = 0; @@ -60,14 +57,14 @@ void HandleInput_LeftAlt2(ovrMobile * Ovr, double displayTime ) //Menu control - Uses "touch" if (useScreenLayer()) { - interactWithTouchScreen(&rightRemoteTracking_new, &rightTrackedRemoteState_new, &rightTrackedRemoteState_old); + interactWithTouchScreen(&leftRemoteTracking_new, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old); } else { //If distance to off-hand remote is less than 35cm and user pushes grip, then we enable weapon stabilisation - float distance = sqrtf(powf(leftRemoteTracking_new.HeadPose.Pose.Position.x - rightRemoteTracking_new.HeadPose.Pose.Position.x, 2) + - powf(leftRemoteTracking_new.HeadPose.Pose.Position.y - rightRemoteTracking_new.HeadPose.Pose.Position.y, 2) + - powf(leftRemoteTracking_new.HeadPose.Pose.Position.z - rightRemoteTracking_new.HeadPose.Pose.Position.z, 2)); + float distance = sqrtf(powf(rightRemoteTracking_new.HeadPose.Pose.Position.x - leftRemoteTracking_new.HeadPose.Pose.Position.x, 2) + + powf(rightRemoteTracking_new.HeadPose.Pose.Position.y - leftRemoteTracking_new.HeadPose.Pose.Position.y, 2) + + powf(rightRemoteTracking_new.HeadPose.Pose.Position.z - leftRemoteTracking_new.HeadPose.Pose.Position.z, 2)); //Turn on weapon stabilisation? if ((rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != @@ -194,7 +191,7 @@ void HandleInput_LeftAlt2(ovrMobile * Ovr, double displayTime ) if (dominantGripPushed) { //Initiate crowbar from backpack mode sendButtonActionSimple("weapon_crowbar"); - Android_Vibrate(80, 1, 0.8); // vibrate to let user know they switched + Android_Vibrate(80, 0, 0.8); // vibrate to let user know they switched grabMeleeWeapon = 1; } } @@ -227,17 +224,11 @@ void HandleInput_LeftAlt2(ovrMobile * Ovr, double displayTime ) } else { - controllerYawHeading = 0.0f;//-cl.refdef.cl_viewangles[YAW]; + controllerYawHeading = 0.0f; } } - //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); - //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 * @@ -317,11 +308,7 @@ void HandleInput_LeftAlt2(ovrMobile * Ovr, double displayTime ) } { - 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); - + //Use (Action) if ((rightTrackedRemoteState_new.Buttons & ovrButton_Joystick) != (rightTrackedRemoteState_old.Buttons & ovrButton_Joystick) && (rightTrackedRemoteState_new.Buttons & ovrButton_Joystick)) { @@ -367,7 +354,7 @@ void HandleInput_LeftAlt2(ovrMobile * Ovr, double displayTime ) &rightTrackedRemoteState_old, ovrButton_Trigger, K_SHIFT); - static increaseSnap = true; + static bool increaseSnap = true; if (rightTrackedRemoteState_new.Joystick.x > 0.6f) { if (increaseSnap) @@ -386,7 +373,7 @@ void HandleInput_LeftAlt2(ovrMobile * Ovr, double displayTime ) increaseSnap = true; } - static decreaseSnap = true; + static bool decreaseSnap = true; if (rightTrackedRemoteState_new.Joystick.x < -0.6f) { if (decreaseSnap) diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputRight.c b/Projects/Android/jni/src/Lambda1VR/VrInputRight.c deleted file mode 100644 index 1cc7f95..0000000 --- a/Projects/Android/jni/src/Lambda1VR/VrInputRight.c +++ /dev/null @@ -1,419 +0,0 @@ -/************************************************************************************ - -Filename : VrInputRight.c -Content : Handles controller input for the right-handed -Created : August 2019 -Authors : Simon Brown - -*************************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "VrInput.h" -#include "VrCvars.h" - -extern cvar_t *cl_forwardspeed; -extern cvar_t *cl_movespeedkey; - -void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx, float dy ); - -void HandleInput_Right(ovrMobile * Ovr, double displayTime ) -{ - //Ensure handedness is set to right - Cvar_Set("hand", "0"); - - //Get info for tracked remotes - acquireTrackedRemotesData(Ovr, displayTime); - - static bool dominantGripPushed = false; - static int grabMeleeWeapon = 0; - 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)) { - - 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" - if (useScreenLayer()) - { - interactWithTouchScreen(&rightRemoteTracking_new, &rightTrackedRemoteState_new, &rightTrackedRemoteState_old); - } - else - { - //If distance to off-hand remote is less than 35cm and user pushes grip, then we enable weapon stabilisation - float distance = sqrtf(powf(leftRemoteTracking_new.HeadPose.Pose.Position.x - rightRemoteTracking_new.HeadPose.Pose.Position.x, 2) + - powf(leftRemoteTracking_new.HeadPose.Pose.Position.y - rightRemoteTracking_new.HeadPose.Pose.Position.y, 2) + - powf(leftRemoteTracking_new.HeadPose.Pose.Position.z - rightRemoteTracking_new.HeadPose.Pose.Position.z, 2)); - - //Turn on weapon stabilisation? - if ((leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { - - if (leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) - { - if (distance < 0.50f) - { - Cvar_Set2("vr_weapon_stabilised", "1", true); - } - } - else - { - Cvar_Set2("vr_weapon_stabilised", "0", true); - } - } - - //dominant hand stuff first - { - ///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]; - - 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; - - { - 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 - const ovrQuatf quatRemote = rightRemoteTracking_new.HeadPose.Pose.Orientation; - QuatToYawPitchRoll(quatRemote, vr_weapon_pitchadjust->value, weaponangles[ADJUSTED]); - QuatToYawPitchRoll(quatRemote, 0.0f, weaponangles[UNADJUSTED]); - QuatToYawPitchRoll(quatRemote, -30.0f, weaponangles[MELEE]); - - - if (vr_weapon_stabilised->integer && - //Don't trigger stabilisation if controllers are close together (holding Glock for example) - (distance > 0.15f)) - { - float z = leftRemoteTracking_new.HeadPose.Pose.Position.z - rightRemoteTracking_new.HeadPose.Pose.Position.z; - float x = leftRemoteTracking_new.HeadPose.Pose.Position.x - rightRemoteTracking_new.HeadPose.Pose.Position.x; - float y = leftRemoteTracking_new.HeadPose.Pose.Position.y - rightRemoteTracking_new.HeadPose.Pose.Position.y; - 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]); - } - } - else - { - weaponangles[ADJUSTED][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); - weaponangles[ADJUSTED][PITCH] *= -1.0f; - - weaponangles[UNADJUSTED][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); - weaponangles[UNADJUSTED][PITCH] *= -1.0f; - - weaponangles[MELEE][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); - weaponangles[MELEE][PITCH] *= -1.0f; - } - - //Use (Action) - if ((rightTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (rightTrackedRemoteState_old.Buttons & ovrButton_Joystick)) { - - sendButtonAction("+use", (rightTrackedRemoteState_new.Buttons & ovrButton_Joystick)); - } - - static bool finishReloadNextFrame = false; - if (finishReloadNextFrame) - { - sendButtonActionSimple("-reload"); - finishReloadNextFrame = false; - } - - if ((rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (rightTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { - - dominantGripPushed = (rightTrackedRemoteState_new.Buttons & - ovrButton_GripTrigger) != 0; - - if (grabMeleeWeapon == 0) - { - 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; - } - } - } - - float controllerYawHeading = 0.0f; - //off-hand stuff - { - flashlightoffset[0] = leftRemoteTracking_new.HeadPose.Pose.Position.x - hmdPosition[0]; - 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]; - - 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]; - } - } - - //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); - - //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)); - - if (ducked != DUCK_NOTDUCKED) - { - multiplier *= 3.0f; - } - - vec2_t v; - rotateAboutOrigin(-positionDeltaThisFrame[0] * multiplier, - positionDeltaThisFrame[2] * multiplier, -hmdorientation[YAW], v); - positional_movementSideways = v[0]; - positional_movementForward = v[1]; - - ALOGV(" positional_movementSideways: %f, positional_movementForward: %f", - positional_movementSideways, - positional_movementForward); - - //Jump (B Button) - handleTrackedControllerButton(&rightTrackedRemoteState_new, - &rightTrackedRemoteState_old, ovrButton_B, K_SPACE); - - //We need to record if we have started firing primary so that releasing trigger will stop 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; - - 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)) { - - firingPrimary = (rightTrackedRemoteState_new.Buttons & ovrButton_Trigger); - sendButtonAction("+attack", firingPrimary); - } - } - - //Duck with A - if ((rightTrackedRemoteState_new.Buttons & ovrButton_A) != - (rightTrackedRemoteState_old.Buttons & ovrButton_A) && - ducked != DUCK_CROUCHED) { - ducked = (rightTrackedRemoteState_new.Buttons & ovrButton_A) ? DUCK_BUTTON : DUCK_NOTDUCKED; - sendButtonAction("+duck", (rightTrackedRemoteState_new.Buttons & ovrButton_A)); - } - - //Weapon Chooser - static bool weaponSwitched = false; - 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.75f, rightTrackedRemoteState_new.Joystick.y, 1.0f)) - { - sendButtonActionSimple("invnext"); - } - else - { - 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); - - //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); - - } - - //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; - - player_moving = (fabs(x) + fabs(y)) > 0.01f; - - - //Adjust to be off-hand controller oriented - vec2_t v; - rotateAboutOrigin(x, y, controllerYawHeading, v); - - remote_movementSideways = v[0]; - remote_movementForward = v[1]; - - ALOGV(" remote_movementSideways: %f, remote_movementForward: %f", - remote_movementSideways, - remote_movementForward); - - - //flashlight on/off - if (((leftTrackedRemoteState_new.Buttons & ovrButton_X) != - (leftTrackedRemoteState_old.Buttons & ovrButton_X)) && - (leftTrackedRemoteState_old.Buttons & ovrButton_X)) { - sendButtonActionSimple("impulse 100"); - } - - - //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); - - 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 (snapTurn < -180.0f) - { - snapTurn += 360.f; - } - } - } 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; - - //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 (rightTrackedRemoteState_new.Joystick.x > -0.4f) - { - decreaseSnap = true; - } - } - } - - //Save state - rightTrackedRemoteState_old = rightTrackedRemoteState_new; - leftTrackedRemoteState_old = leftTrackedRemoteState_new; -} \ No newline at end of file diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputRightAlt.c b/Projects/Android/jni/src/Lambda1VR/VrInputRightAlt.c deleted file mode 100644 index 13f661a..0000000 --- a/Projects/Android/jni/src/Lambda1VR/VrInputRightAlt.c +++ /dev/null @@ -1,440 +0,0 @@ -/************************************************************************************ - -Filename : VrInputRightAlt.c -Content : Handles controller input for the right-handed -Created : August 2019 -Authors : Simon Brown - -*************************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "VrInput.h" -#include "VrCvars.h" - -extern cvar_t *cl_forwardspeed; -extern cvar_t *cl_movespeedkey; - -void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx, float dy ); - -void HandleInput_RightAlt(ovrMobile * Ovr, double displayTime ) -{ - //Ensure handedness is set to right - Cvar_Set("hand", "0"); - - //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; - - //Menu button - handleTrackedControllerButton(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, ovrButton_Enter, K_ESCAPE); - - //Menu control - Uses "touch" - if (useScreenLayer()) - { - interactWithTouchScreen(&rightRemoteTracking_new, &rightTrackedRemoteState_new, &rightTrackedRemoteState_old); - } - else - { - //If distance to off-hand remote is less than 35cm and user pushes grip, then we enable weapon stabilisation - float distance = sqrtf(powf(leftRemoteTracking_new.HeadPose.Pose.Position.x - rightRemoteTracking_new.HeadPose.Pose.Position.x, 2) + - powf(leftRemoteTracking_new.HeadPose.Pose.Position.y - rightRemoteTracking_new.HeadPose.Pose.Position.y, 2) + - powf(leftRemoteTracking_new.HeadPose.Pose.Position.z - rightRemoteTracking_new.HeadPose.Pose.Position.z, 2)); - - //Turn on weapon stabilisation? - if ((leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (leftTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { - - if (leftTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) - { - if (distance < 0.50f) - { - Cvar_Set2("vr_weapon_stabilised", "1", true); - } - } - else - { - Cvar_Set2("vr_weapon_stabilised", "0", true); - } - } - - //dominant hand stuff first - { - ///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]; - - 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; - - { - 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 - const ovrQuatf quatRemote = rightRemoteTracking_new.HeadPose.Pose.Orientation; - QuatToYawPitchRoll(quatRemote, vr_weapon_pitchadjust->value, weaponangles[ADJUSTED]); - QuatToYawPitchRoll(quatRemote, 0.0f, weaponangles[UNADJUSTED]); - QuatToYawPitchRoll(quatRemote, -30.0f, weaponangles[MELEE]); - - - if (vr_weapon_stabilised->integer && - //Don't trigger stabilisation if controllers are close together (holding Glock for example) - (distance > 0.15f)) - { - float z = leftRemoteTracking_new.HeadPose.Pose.Position.z - rightRemoteTracking_new.HeadPose.Pose.Position.z; - float x = leftRemoteTracking_new.HeadPose.Pose.Position.x - rightRemoteTracking_new.HeadPose.Pose.Position.x; - float y = leftRemoteTracking_new.HeadPose.Pose.Position.y - rightRemoteTracking_new.HeadPose.Pose.Position.y; - 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]); - } - } - else - { - weaponangles[ADJUSTED][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); - weaponangles[ADJUSTED][PITCH] *= -1.0f; - - weaponangles[UNADJUSTED][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); - weaponangles[UNADJUSTED][PITCH] *= -1.0f; - - weaponangles[MELEE][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]); - weaponangles[MELEE][PITCH] *= -1.0f; - } - - //Use (Action) - if ((rightTrackedRemoteState_new.Buttons & ovrButton_Joystick) != - (rightTrackedRemoteState_old.Buttons & ovrButton_Joystick)) { - - sendButtonAction("+use", (rightTrackedRemoteState_new.Buttons & ovrButton_Joystick)); - } - - static bool finishReloadNextFrame = false; - if (finishReloadNextFrame) - { - sendButtonActionSimple("-reload"); - finishReloadNextFrame = false; - } - - if ((rightTrackedRemoteState_new.Buttons & ovrButton_GripTrigger) != - (rightTrackedRemoteState_old.Buttons & ovrButton_GripTrigger)) { - - dominantGripPushed = (rightTrackedRemoteState_new.Buttons & - ovrButton_GripTrigger) != 0; - - if (grabMeleeWeapon == 0) - { - 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; - } - } - } - - float controllerYawHeading = 0.0f; - //off-hand stuff - { - flashlightoffset[0] = leftRemoteTracking_new.HeadPose.Pose.Position.x - hmdPosition[0]; - 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]; - - 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]; - } - } - - //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); - - //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)); - - if (ducked != DUCK_NOTDUCKED) - { - multiplier *= 3.0f; - } - - vec2_t v; - rotateAboutOrigin(-positionDeltaThisFrame[0] * multiplier, - positionDeltaThisFrame[2] * multiplier, -hmdorientation[YAW], v); - positional_movementSideways = v[0]; - positional_movementForward = v[1]; - - ALOGV(" positional_movementSideways: %f, positional_movementForward: %f", - positional_movementSideways, - positional_movementForward); - - //Jump (B Button) - handleTrackedControllerButton(&rightTrackedRemoteState_new, - &rightTrackedRemoteState_old, ovrButton_B, K_SPACE); - - //We need to record if we have started firing primary so that releasing trigger will stop 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; - - 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)) { - - firingPrimary = (rightTrackedRemoteState_new.Buttons & ovrButton_Trigger); - sendButtonAction("+attack", firingPrimary); - } - } - - //Duck with A - if ((rightTrackedRemoteState_new.Buttons & ovrButton_A) != - (rightTrackedRemoteState_old.Buttons & ovrButton_A) && - ducked != DUCK_CROUCHED) { - ducked = (rightTrackedRemoteState_new.Buttons & ovrButton_A) ? DUCK_BUTTON : DUCK_NOTDUCKED; - sendButtonAction("+duck", (rightTrackedRemoteState_new.Buttons & ovrButton_A)); - } - - - 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); - - //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); - - } - - //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; - - player_moving = (fabs(x) + fabs(y)) > 0.01f; - - //Adjust to be off-hand controller oriented - vec2_t v; - rotateAboutOrigin(x, y, controllerYawHeading, v); - - remote_movementSideways = v[0]; - remote_movementForward = v[1]; - - ALOGV(" remote_movementSideways: %f, remote_movementForward: %f", - remote_movementSideways, - remote_movementForward); - - - //flashlight on/off - if (((leftTrackedRemoteState_new.Buttons & ovrButton_X) != - (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" ); -#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); - - 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; - } - } - } else if (rightTrackedRemoteState_new.Joystick.x < 0.4f) { - increaseSnap = true; - } - - 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 (snapTurn > 180.0f) { - snapTurn -= 360.f; - } - } - } else if (rightTrackedRemoteState_new.Joystick.x > -0.4f) { - decreaseSnap = true; - } - } - } - } - - //Save state - rightTrackedRemoteState_old = rightTrackedRemoteState_new; - leftTrackedRemoteState_old = leftTrackedRemoteState_new; -} \ No newline at end of file diff --git a/Projects/Android/jni/src/Xash3D/xash3d/engine/Android.mk b/Projects/Android/jni/src/Xash3D/xash3d/engine/Android.mk index 3be8a94..abcdddd 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/engine/Android.mk +++ b/Projects/Android/jni/src/Xash3D/xash3d/engine/Android.mk @@ -42,10 +42,8 @@ LAMBDA1VR_SRC_FILES := \ $(LOCAL_PATH)/../../../Lambda1VR/L1VR_SurfaceView.c \ $(LOCAL_PATH)/../../../Lambda1VR/VrCompositor.c \ $(LOCAL_PATH)/../../../Lambda1VR/VrInputCommon.c \ - $(LOCAL_PATH)/../../../Lambda1VR/VrInputRightAlt.c \ - $(LOCAL_PATH)/../../../Lambda1VR/VrInputRight.c \ - $(LOCAL_PATH)/../../../Lambda1VR/VrInputLeft.c \ - $(LOCAL_PATH)/../../../Lambda1VR/VrInputLeftAlt.c \ + $(LOCAL_PATH)/../../../Lambda1VR/VrInputDefault.c \ + $(LOCAL_PATH)/../../../Lambda1VR/VrInputAlt.c \ $(LOCAL_PATH)/../../../Lambda1VR/VrInputLeftAlt2.c \ $(LOCAL_PATH)/../../../Lambda1VR/argtable3.c diff --git a/Projects/Android/jni/src/hlsdk-xash3d b/Projects/Android/jni/src/hlsdk-xash3d index 5b58f4d..cf12843 160000 --- a/Projects/Android/jni/src/hlsdk-xash3d +++ b/Projects/Android/jni/src/hlsdk-xash3d @@ -1 +1 @@ -Subproject commit 5b58f4d7ac6f293d5011614f97668a284853326d +Subproject commit cf128439a7c4e34f7b98e291e8c6029e0d31104a