From 1dd4b9ab183b77af6c85b662df657550e4a27093 Mon Sep 17 00:00:00 2001 From: Simon Date: Fri, 25 Feb 2022 22:16:37 +0000 Subject: [PATCH] Several fixes.. - Proper button remapping - Can be configured in autoeec.cfg - Ability to remap all button functions (including forward/back on R stick) - Ability to define an alt-key so that all buttons can have two seperate functions - Slight reduction to SS value to boost perf by maybe a frame or two per secone - set Master 1 to be called "Quake3Quest Master" - QoL tweaks to the VR Options menu --- android/app/src/main/AndroidManifest.xml | 4 +- android/app/src/main/assets/autoexec.cfg | 29 +- code/q3_ui/ui_servers2.c | 2 +- code/q3_ui/ui_vr.c | 19 +- code/qcommon/q_shared.h | 2 +- code/server/sv_init.c | 7 +- code/vr/vr_base.c | 30 +- code/vr/vr_input.c | 352 +++++++++++++++++------ code/vr/vr_renderer.c | 2 +- 9 files changed, 324 insertions(+), 123 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 2303c5cc..bd36c284 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -2,8 +2,8 @@ + android:versionCode="23" + android:versionName="0.16.0"> diff --git a/android/app/src/main/assets/autoexec.cfg b/android/app/src/main/assets/autoexec.cfg index d4140dfd..98875c6f 100644 --- a/android/app/src/main/assets/autoexec.cfg +++ b/android/app/src/main/assets/autoexec.cfg @@ -12,4 +12,31 @@ set cg_bobpitch 0 set cg_bobroll 0 set cg_weaponbob 0 set sv_pure 0 -set sv_master2 "13.36.227.32:27950" +set sv_master1 "13.36.227.32:27950" + +//VR Button mappings +set vr_button_map_A "+moveup" +set vr_button_map_A_ALT "" +set vr_button_map_B "+movedown" +set vr_button_map_B_ALT "" +set vr_button_map_X "+button2" +set vr_button_map_X_ALT "" +set vr_button_map_Y "+button3" +set vr_button_map_Y_ALT "" +set vr_button_map_SECONDARYTHUMBSTICK "+scores" +set vr_button_map_SECONDARYTHUMBSTICK_ALT "" +set vr_button_map_PRIMARYTHUMBSTICK "" +set vr_button_map_PRIMARYTHUMBSTICK_ALT "weapon 1" +set vr_button_map_RTHUMBFORWARD "weapnext" +set vr_button_map_RTHUMBFORWARD_ALT "" +set vr_button_map_RTHUMBBACK "weapprev" +set vr_button_map_RTHUMBBACK_ALT "" +set vr_button_map_SECONDARYTRIGGER "+moveup" +set vr_button_map_SECONDARYTRIGGER_ALT "" +set vr_button_map_PRIMARYTRIGGER "+attack" +set vr_button_map_PRIMARYTRIGGER_ALT "" +set vr_button_map_SECONDARYGRIP "+weapon_stabilise" +set vr_button_map_SECONDARYGRIP_ALT "" +set vr_button_map_PRIMARYGRIP "+alt" +set vr_button_map_PRIMARYGRIP_ALT "" + diff --git a/code/q3_ui/ui_servers2.c b/code/q3_ui/ui_servers2.c index 49c3a04b..63b7830d 100644 --- a/code/q3_ui/ui_servers2.c +++ b/code/q3_ui/ui_servers2.c @@ -109,7 +109,7 @@ MULTIPLAYER MENU (SERVER BROWSER) static const char *master_items[] = { "Local", "Internet", - "Master1", + "Quake3Quest Master", "Master2", "Master3", "Master4", diff --git a/code/q3_ui/ui_vr.c b/code/q3_ui/ui_vr.c index 485a710b..36cb54bc 100644 --- a/code/q3_ui/ui_vr.c +++ b/code/q3_ui/ui_vr.c @@ -44,7 +44,6 @@ VR OPTIONS MENU #define ID_AUTOSWITCH 129 #define ID_SNAPTURN 130 #define ID_DIRECTIONMODE 131 -#define ID_JUMPTRIGGER 132 #define ID_REFRESHRATE 133 #define ID_WEAPONPITCH 134 #define ID_HEIGHTADJUST 135 @@ -77,7 +76,6 @@ typedef struct { menuradiobutton_s autoswitch; menulist_s snapturn; menulist_s directionmode; - menuradiobutton_s jumptrigger; menulist_s refreshrate; menuslider_s weaponpitch; menuslider_s heightadjust; @@ -101,7 +99,6 @@ static void VR_SetMenuItems( void ) { s_VR.autoswitch.curvalue = trap_Cvar_VariableValue( "cg_autoswitch" ) != 0; s_VR.snapturn.curvalue = (int)trap_Cvar_VariableValue( "vr_snapturn" ) / 45; s_VR.directionmode.curvalue = (int)trap_Cvar_VariableValue( "vr_directionMode" ) % NUM_DIRECTIONMODE; - s_VR.jumptrigger.curvalue = trap_Cvar_VariableValue( "vr_jumpTrigger" ) != 0; int refresh = (int)trap_Cvar_VariableValue( "vr_refreshrate" ); switch (refresh) { @@ -163,10 +160,6 @@ static void VR_Event( void* ptr, int notification ) { trap_Cvar_SetValue( "vr_directionMode", s_VR.directionmode.curvalue ); break; - case ID_JUMPTRIGGER: - trap_Cvar_SetValue( "vr_jumpTrigger", s_VR.jumptrigger.curvalue ); - break; - case ID_REFRESHRATE: { int refresh; switch (s_VR.refreshrate.curvalue) { @@ -329,7 +322,7 @@ static void VR_MenuInit( void ) { s_VR.framer.width = 256; s_VR.framer.height = 334; - y = 144; + y = 120; s_VR.drawhud.generic.type = MTYPE_RADIOBUTTON; s_VR.drawhud.generic.name = "Draw HUD:"; s_VR.drawhud.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; @@ -389,15 +382,6 @@ static void VR_MenuInit( void ) { s_VR.directionmode.itemnames = s_directionmode; s_VR.directionmode.numitems = NUM_DIRECTIONMODE; - y += BIGCHAR_HEIGHT; - s_VR.jumptrigger.generic.type = MTYPE_RADIOBUTTON; - s_VR.jumptrigger.generic.name = "Off-hand Trigger Jump:"; - s_VR.jumptrigger.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; - s_VR.jumptrigger.generic.callback = VR_Event; - s_VR.jumptrigger.generic.id = ID_JUMPTRIGGER; - s_VR.jumptrigger.generic.x = VR_X_POS; - s_VR.jumptrigger.generic.y = y; - y += BIGCHAR_HEIGHT; s_VR.refreshrate.generic.type = MTYPE_SPINCONTROL; s_VR.refreshrate.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; @@ -511,7 +495,6 @@ static void VR_MenuInit( void ) { Menu_AddItem( &s_VR.menu, &s_VR.autoswitch ); Menu_AddItem( &s_VR.menu, &s_VR.snapturn ); Menu_AddItem( &s_VR.menu, &s_VR.directionmode ); - Menu_AddItem( &s_VR.menu, &s_VR.jumptrigger ); Menu_AddItem( &s_VR.menu, &s_VR.refreshrate ); Menu_AddItem( &s_VR.menu, &s_VR.weaponpitch ); Menu_AddItem( &s_VR.menu, &s_VR.heightadjust ); diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index d5cb7af4..2794c2fc 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -52,7 +52,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define STEAMPATH_APPID "2200" #define GOGPATH_ID "1441704920" #define GAMENAME_FOR_MASTER "Quake3Arena" - #define CINEMATICS_LOGO "idlogo.RoQ" +// #define CINEMATICS_LOGO "idlogo.RoQ" #define CINEMATICS_INTRO "intro.RoQ" #define LEGACY_PROTOCOL #endif diff --git a/code/server/sv_init.c b/code/server/sv_init.c index b8fb28c2..1a465cf7 100644 --- a/code/server/sv_init.c +++ b/code/server/sv_init.c @@ -672,9 +672,10 @@ void SV_Init (void) sv_allowDownload = Cvar_Get ("sv_allowDownload", "0", CVAR_SERVERINFO); Cvar_Get ("sv_dlURL", "", CVAR_SERVERINFO | CVAR_ARCHIVE); - sv_master[0] = Cvar_Get("sv_master1", MASTER_SERVER_NAME, 0); - sv_master[1] = Cvar_Get("sv_master2", "master.ioquake3.org", 0); - for(index = 2; index < MAX_MASTER_SERVERS; index++) + sv_master[0] = Cvar_Get("sv_master1", "", 0); // This is set to our Q3Q master + sv_master[1] = Cvar_Get("sv_master2", MASTER_SERVER_NAME, 0); + sv_master[2] = Cvar_Get("sv_master3", "master.ioquake3.org", 0); + for(index = 3; index < MAX_MASTER_SERVERS; index++) sv_master[index] = Cvar_Get(va("sv_master%d", index + 1), "", CVAR_ARCHIVE); sv_reconnectlimit = Cvar_Get ("sv_reconnectlimit", "3", 0); diff --git a/code/vr/vr_base.c b/code/vr/vr_base.c index a1081512..fa9981f3 100644 --- a/code/vr/vr_base.c +++ b/code/vr/vr_base.c @@ -29,7 +29,6 @@ cvar_t *vr_weaponPitch = NULL; cvar_t *vr_twoHandedWeapons = NULL; cvar_t *vr_refreshrate = NULL; cvar_t *vr_weaponScope = NULL; -cvar_t *vr_jumpTrigger = NULL; cvar_t *vr_rollWhenHit = NULL; cvar_t *vr_hudYOffset = NULL; @@ -62,7 +61,6 @@ void VR_InitCvars( void ) vr_twoHandedWeapons = Cvar_Get ("vr_twoHandedWeapons", "1", CVAR_ARCHIVE); vr_refreshrate = Cvar_Get ("vr_refreshrate", "0", CVAR_ARCHIVE); vr_weaponScope = Cvar_Get ("vr_weaponScope", "1", CVAR_ARCHIVE); - vr_jumpTrigger = Cvar_Get ("vr_jumpTrigger", "1", CVAR_ARCHIVE); vr_rollWhenHit = Cvar_Get ("vr_rollWhenHit", "0", CVAR_ARCHIVE); vr_hudYOffset = Cvar_Get ("vr_hudYOffset", "0", CVAR_ARCHIVE); @@ -83,6 +81,34 @@ void VR_InitCvars( void ) Cvar_Get ("vr_weapon_adjustment_11", "0.8,-5.5,6,0,0,0,0", CVAR_ARCHIVE); Cvar_Get ("vr_weapon_adjustment_12", "0.8,-5.5,6,0,0,0,0", CVAR_ARCHIVE); + //Button remapping + Cvar_Get ("vr_button_map_A", "+moveup", CVAR_ARCHIVE); // Jump + Cvar_Get ("vr_button_map_A_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_B", "+movedown", CVAR_ARCHIVE); // Crouch + Cvar_Get ("vr_button_map_B_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_X", "+button2", CVAR_ARCHIVE); // Use Item + Cvar_Get ("vr_button_map_X_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_Y", "+button3", CVAR_ARCHIVE); // Gesture + Cvar_Get ("vr_button_map_Y_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_SECONDARYTHUMBSTICK", "+scores", CVAR_ARCHIVE); // Scoreboard + Cvar_Get ("vr_button_map_SECONDARYTHUMBSTICK_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_PRIMARYTHUMBSTICK", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_PRIMARYTHUMBSTICK_ALT", "weapon 1", CVAR_ARCHIVE); // Switch to gauntlet + Cvar_Get ("vr_button_map_RTHUMBFORWARD", "weapnext", CVAR_ARCHIVE); //Next Weapon + Cvar_Get ("vr_button_map_RTHUMBFORWARD_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACK", "weapprev", CVAR_ARCHIVE); // Previous Weapon + Cvar_Get ("vr_button_map_RTHUMBBACK_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_SECONDARYTRIGGER", "+moveup", CVAR_ARCHIVE); // Also Jump + Cvar_Get ("vr_button_map_SECONDARYTRIGGER_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_PRIMARYTRIGGER", "+attack", CVAR_ARCHIVE); // Fire + Cvar_Get ("vr_button_map_PRIMARYTRIGGER_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_SECONDARYGRIP", "+weapon_stabilise", CVAR_ARCHIVE); // Weapon stabilisation + Cvar_Get ("vr_button_map_SECONDARYGRIP_ALT", "", CVAR_ARCHIVE); // unmapped + + // enables the alt mapping of a button + Cvar_Get ("vr_button_map_PRIMARYGRIP", "+alt", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_PRIMARYGRIP_ALT", "", CVAR_ARCHIVE); + } void VR_Destroy( engine_t* engine ) diff --git a/code/vr/vr_input.c b/code/vr/vr_input.c index f02ee111..a3dadecc 100644 --- a/code/vr/vr_input.c +++ b/code/vr/vr_input.c @@ -71,11 +71,11 @@ extern cvar_t *vr_heightAdjust; extern cvar_t *vr_twoHandedWeapons; extern cvar_t *vr_refreshrate; extern cvar_t *vr_weaponScope; -extern cvar_t *vr_jumpTrigger; jclass callbackClass; jmethodID android_haptic_event; +qboolean alt_key_mode_active = qfalse; void rotateAboutOrigin(float x, float y, float rotation, vec2_t out) { @@ -187,11 +187,65 @@ void QuatToYawPitchRoll(ovrQuatf q, vec3_t rotation, vec3_t out) { GetAnglesFromVectors(forwardNormal, rightNormal, upNormal, out); } -static void sendButtonActionSimple(const char* action) +static void IN_SendButtonAction(const char* action, qboolean pressed) { - char command[256]; - snprintf( command, sizeof( command ), "%s\n", action ); - Cbuf_AddText( command ); + if (action) + { + //handle our special actions first + if (strcmp(action, "+alt") == 0) + { + alt_key_mode_active = pressed; + } + else if (strcmp(action, "+weapon_stabilise") == 0) + { + vr.weapon_stabilised = pressed; + } + else if (action[0] == '+') + { + char command[256]; + Com_sprintf(command, sizeof(command), "%s%s\n", pressed ? "+" : "-", action + 1); + Cbuf_AddText(command); + } + else if (pressed) + { + char command[256]; + Com_sprintf(command, sizeof(command), "%s\n", action); + Cbuf_AddText(command); + } + } +} + +void VR_HapticEvent(const char* event, int position, int flags, int intensity, float angle, float yHeight ) +{ + engine_t* engine = VR_GetEngine(); + jstring StringArg1 = (*(engine->java.Env))->NewStringUTF(engine->java.Env, event); + (*(engine->java.Env))->CallVoidMethod(engine->java.Env, engine->java.ActivityObject, android_haptic_event, StringArg1, position, flags, intensity, angle, yHeight); +} + +static qboolean IN_GetButtonAction(const char* button, char* action) +{ + char cvarname[256]; + Com_sprintf(cvarname, 256, "vr_button_map_%s%s", button, alt_key_mode_active ? "_ALT" : ""); + char * val = Cvar_VariableString(cvarname); + if (val && strlen(val) > 0) + { + Com_sprintf(action, 256, "%s", val); + return qtrue; + } + + //If we didn't find something for this button and the alt key is active, then see if the un-alt key has a function + if (alt_key_mode_active) + { + Com_sprintf(cvarname, 256, "vr_button_map_%s", button); + char * val = Cvar_VariableString(cvarname); + if (val && strlen(val) > 0) + { + Com_sprintf(action, 256, "%s", val); + return qtrue; + } + } + + return qfalse; } static float length(float x, float y) @@ -210,7 +264,6 @@ void IN_VRInit( void ) static void IN_VRController( qboolean isRightController, ovrTracking remoteTracking ) { - if (isRightController == (vr_righthanded->integer != 0)) { //Set gun angles - We need to calculate all those we might need (including adjustments) for the client to then take its pick @@ -280,6 +333,7 @@ static void IN_VRController( qboolean isRightController, ovrTracking remoteTrack static void IN_VRJoystick( qboolean isRightController, float joystickX, float joystickY ) { + char action[256]; vrController_t* controller = isRightController == qtrue ? &rightController : &leftController; if (vr.virtual_screen || @@ -367,20 +421,39 @@ static void IN_VRJoystick( qboolean isRightController, float joystickX, float jo Com_QueueEvent(in_vrEventTime, SE_MOUSE, x, 0, 0, NULL); } - if (!(controller->axisButtons & VR_TOUCH_AXIS_UP) && joystickY > pressedThreshold) { + //Default up/down on right thumbstick is weapon switch + if (!(controller->axisButtons & VR_TOUCH_AXIS_UP) && joystickY > pressedThreshold) + { controller->axisButtons |= VR_TOUCH_AXIS_UP; - sendButtonActionSimple("weapnext"); - } else if ((controller->axisButtons & VR_TOUCH_AXIS_UP) && - joystickY < releasedThreshold) { + if (IN_GetButtonAction("RTHUMBFORWARD", action)) + { + IN_SendButtonAction(action, qtrue); + } + } + else if ((controller->axisButtons & VR_TOUCH_AXIS_UP) && + joystickY < releasedThreshold) + { + if (IN_GetButtonAction("RTHUMBFORWARD", action)) + { + IN_SendButtonAction(action, qfalse); + } controller->axisButtons &= ~VR_TOUCH_AXIS_UP; } + if (!(controller->axisButtons & VR_TOUCH_AXIS_DOWN) && joystickY < -pressedThreshold) { controller->axisButtons |= VR_TOUCH_AXIS_DOWN; - sendButtonActionSimple("weapprev"); + if (IN_GetButtonAction("RTHUMBBACK", action)) + { + IN_SendButtonAction(action, qtrue); + } } else if ((controller->axisButtons & VR_TOUCH_AXIS_DOWN) && joystickY > -releasedThreshold) { controller->axisButtons &= ~VR_TOUCH_AXIS_DOWN; + if (IN_GetButtonAction("RTHUMBBACK", action)) + { + IN_SendButtonAction(action, qfalse); + } } } } @@ -389,42 +462,81 @@ static void IN_VRJoystick( qboolean isRightController, float joystickX, float jo static void IN_VRTriggers( qboolean isRightController, float index ) { vrController_t* controller = isRightController == qtrue ? &rightController : &leftController; - if (isRightController == (vr_righthanded->integer != 0)) { - if (!(controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && index > pressedThreshold) { - controller->axisButtons |= VR_TOUCH_AXIS_TRIGGER_INDEX; - Com_QueueEvent(in_vrEventTime, SE_KEY, K_MOUSE1, qtrue, 0, NULL); - } else if ((controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && index < releasedThreshold) { - controller->axisButtons &= ~VR_TOUCH_AXIS_TRIGGER_INDEX; - Com_QueueEvent(in_vrEventTime, SE_KEY, K_MOUSE1, qfalse, 0, NULL); - } - } - - //off hand trigger Jump as well - if configured - if (vr_jumpTrigger->integer) { - if (isRightController != (vr_righthanded->integer != 0)) { + //Primary controller trigger is mouse click in screen mode or in intermission + if (VR_useScreenLayer() || cl.snap.ps.pm_type == PM_INTERMISSION) + { + if (isRightController == (vr_righthanded->integer != 0)) + { if (!(controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && - index > pressedThreshold) { + index > pressedThreshold) + { controller->axisButtons |= VR_TOUCH_AXIS_TRIGGER_INDEX; - Com_QueueEvent(in_vrEventTime, SE_KEY, K_SPACE, qtrue, 0, NULL); - } else if ((controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && - index < releasedThreshold) { + Com_QueueEvent(in_vrEventTime, SE_KEY, K_MOUSE1, qtrue, 0, NULL); + } + else if ((controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && + index < releasedThreshold) + { controller->axisButtons &= ~VR_TOUCH_AXIS_TRIGGER_INDEX; - Com_QueueEvent(in_vrEventTime, SE_KEY, K_SPACE, qfalse, 0, NULL); + Com_QueueEvent(in_vrEventTime, SE_KEY, K_MOUSE1, qfalse, 0, NULL); + } + } + } + else + { + char action[256]; + + //Primary trigger + if (isRightController == (vr_righthanded->integer != 0)) + { + if (!(controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && + index > pressedThreshold) + { + controller->axisButtons |= VR_TOUCH_AXIS_TRIGGER_INDEX; + if (IN_GetButtonAction("PRIMARYTRIGGER", action)) + { + IN_SendButtonAction(action, qtrue); + } + } + else if ((controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && + index < releasedThreshold) + { + controller->axisButtons &= ~VR_TOUCH_AXIS_TRIGGER_INDEX; + if (IN_GetButtonAction("PRIMARYTRIGGER", action)) + { + IN_SendButtonAction(action, qfalse); + } + } + } + + //off hand trigger + if (isRightController != (vr_righthanded->integer != 0)) + { + if (!(controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && + index > pressedThreshold) + { + controller->axisButtons |= VR_TOUCH_AXIS_TRIGGER_INDEX; + if (IN_GetButtonAction("SECONDARYTRIGGER", action)) + { + IN_SendButtonAction(action, qtrue); + } + } + else if ((controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) && + index < releasedThreshold) + { + controller->axisButtons &= ~VR_TOUCH_AXIS_TRIGGER_INDEX; + if (IN_GetButtonAction("SECONDARYTRIGGER", action)) + { + IN_SendButtonAction(action, qfalse); + } } } } } -void VR_HapticEvent(const char* event, int position, int flags, int intensity, float angle, float yHeight ) -{ - engine_t* engine = VR_GetEngine(); - jstring StringArg1 = (*(engine->java.Env))->NewStringUTF(engine->java.Env, event); - (*(engine->java.Env))->CallVoidMethod(engine->java.Env, engine->java.ActivityObject, android_haptic_event, StringArg1, position, flags, intensity, angle, yHeight); -} - - static void IN_VRButtonsChanged( qboolean isRightController, uint32_t buttons ) { + char action[256]; + vrController_t* controller = isRightController == qtrue ? &rightController : &leftController; { @@ -435,77 +547,129 @@ static void IN_VRButtonsChanged( qboolean isRightController, uint32_t buttons ) } } - if (isRightController != (vr_righthanded->integer != 0)) + if (isRightController == !vr_righthanded->integer) { - if ((buttons & ovrButton_GripTrigger) && !(controller->buttons & ovrButton_GripTrigger)) { - vr.weapon_stabilised = qtrue; - } else if (!(buttons & ovrButton_GripTrigger) && (controller->buttons & ovrButton_GripTrigger)) { - vr.weapon_stabilised = qfalse; - } - } - - //Jump - if ((buttons & ovrButton_A) && !(controller->buttons & ovrButton_A)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, K_SPACE, qtrue, 0, NULL); - } else if (!(buttons & ovrButton_A) && (controller->buttons & ovrButton_A)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, K_SPACE, qfalse, 0, NULL); - } - - if ((buttons & ovrButton_B) && !(controller->buttons & ovrButton_B)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, 'c', qtrue, 0, NULL); - } else if (!(buttons & ovrButton_B) && (controller->buttons & ovrButton_B)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, 'c', qfalse, 0, NULL); - } - - if (isRightController) { - if (vr_righthanded->integer == 0) { - //Right thumbstick is "use item" - if ((buttons & ovrButton_RThumb) && !(controller->buttons & ovrButton_RThumb)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, K_ENTER, qtrue, 0, NULL); - } else if (!(buttons & ovrButton_RThumb) && (controller->buttons & ovrButton_RThumb)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, K_ENTER, qfalse, 0, NULL); + if ((buttons & ovrButton_GripTrigger) && !(controller->buttons & ovrButton_GripTrigger)) + { + if (IN_GetButtonAction("SECONDARYGRIP", action)) + { + IN_SendButtonAction(action, qtrue); } } - else { - //Right thumbstick is nothing - if ((buttons & ovrButton_RThumb) && !(controller->buttons & ovrButton_RThumb)) { - // - } else if (!(buttons & ovrButton_RThumb) && (controller->buttons & ovrButton_RThumb)) { - // + else if (!(buttons & ovrButton_GripTrigger) && + (controller->buttons & ovrButton_GripTrigger)) + { + if (IN_GetButtonAction("SECONDARYGRIP", action)) + { + IN_SendButtonAction(action, qfalse); } } - } else { - if (vr_righthanded->integer == 0) { - //left thumbstick is scoreboard - if ((buttons & ovrButton_LThumb) && !(controller->buttons & ovrButton_LThumb)) { - // - } else if (!(buttons & ovrButton_LThumb) && (controller->buttons & ovrButton_LThumb)) { - // + } + else + { + if ((buttons & ovrButton_GripTrigger) && !(controller->buttons & ovrButton_GripTrigger)) + { + if (IN_GetButtonAction("PRIMARYGRIP", action)) + { + IN_SendButtonAction(action, qtrue); } - } else { - //left thumbstick is "use item" - if ((buttons & ovrButton_LThumb) && !(controller->buttons & ovrButton_LThumb)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, K_ENTER, qtrue, 0, NULL); - } else if (!(buttons & ovrButton_LThumb) && (controller->buttons & ovrButton_LThumb)) { - Com_QueueEvent(in_vrEventTime, SE_KEY, K_ENTER, qfalse, 0, NULL); + } + else if (!(buttons & ovrButton_GripTrigger) && + (controller->buttons & ovrButton_GripTrigger)) + { + if (IN_GetButtonAction("PRIMARYGRIP", action)) + { + IN_SendButtonAction(action, qfalse); } } } - //Taunt / Gesture + + if (isRightController == !vr_righthanded->integer) + { + if ((buttons & ovrButton_RThumb) && !(controller->buttons & ovrButton_RThumb)) { + if (IN_GetButtonAction("SECONDARYTHUMBSTICK", action)) + { + IN_SendButtonAction(action, qtrue); + } + + vr.realign = 4; + } else if (!(buttons & ovrButton_RThumb) && (controller->buttons & ovrButton_RThumb)) { + if (IN_GetButtonAction("SECONDARYTHUMBSTICK", action)) + { + IN_SendButtonAction(action, qfalse); + } + } + } + else + { + if ((buttons & ovrButton_RThumb) && !(controller->buttons & ovrButton_RThumb)) { + if (IN_GetButtonAction("PRIMARYTHUMBSTICK", action)) + { + IN_SendButtonAction(action, qtrue); + } + } else if (!(buttons & ovrButton_RThumb) && (controller->buttons & ovrButton_RThumb)) { + if (IN_GetButtonAction("PRIMARYTHUMBSTICK", action)) + { + IN_SendButtonAction(action, qfalse); + } + } + } + + //Jump + if ((buttons & ovrButton_A) && !(controller->buttons & ovrButton_A)) + { + if (IN_GetButtonAction("A", action)) + { + IN_SendButtonAction(action, qtrue); + } + } + else if (!(buttons & ovrButton_A) && (controller->buttons & ovrButton_A)) + { + if (IN_GetButtonAction("A", action)) + { + IN_SendButtonAction(action, qfalse); + } + } + + //Crouch + if ((buttons & ovrButton_B) && !(controller->buttons & ovrButton_B)) { + if (IN_GetButtonAction("B", action)) + { + IN_SendButtonAction(action, qtrue); + } + } else if (!(buttons & ovrButton_B) && (controller->buttons & ovrButton_B)) { + if (IN_GetButtonAction("B", action)) + { + IN_SendButtonAction(action, qfalse); + } + } + + //X default is "use item" if ((buttons & ovrButton_X) && !(controller->buttons & ovrButton_X)) { - sendButtonActionSimple("+button3"); + if (IN_GetButtonAction("X", action)) + { + IN_SendButtonAction(action, qtrue); + } } else if (!(buttons & ovrButton_X) && (controller->buttons & ovrButton_X)) { - sendButtonActionSimple("-button3"); + if (IN_GetButtonAction("X", action)) + { + IN_SendButtonAction(action, qfalse); + } } - // Y button - show scoreboard (and trigger realign just in case) - if ((buttons & ovrButton_Y) && !(controller->buttons & ovrButton_Y)) { - sendButtonActionSimple("+scores"); - vr.realign = 4; - } else if (!(buttons & ovrButton_Y) && (controller->buttons & ovrButton_Y)) { - sendButtonActionSimple("-scores"); - } + //Y default is Gesture + if ((buttons & ovrButton_Y) && !(controller->buttons & ovrButton_Y)) { + if (IN_GetButtonAction("Y", action)) + { + IN_SendButtonAction(action, qtrue); + } + } else if (!(buttons & ovrButton_Y) && (controller->buttons & ovrButton_Y)) { + if (IN_GetButtonAction("Y", action)) + { + IN_SendButtonAction(action, qfalse); + } + } controller->buttons = buttons; } diff --git a/code/vr/vr_renderer.c b/code/vr/vr_renderer.c index b4ef2570..7b3511cd 100644 --- a/code/vr/vr_renderer.c +++ b/code/vr/vr_renderer.c @@ -26,7 +26,7 @@ #include #endif -#define SUPER_SAMPLE 1.2f +#define SUPER_SAMPLE 1.15f extern vr_clientinfo_t vr;