mirror of
https://github.com/astromaddie/lambda1-vr.git
synced 2026-10-21 16:00:15 +02:00
Use gesture
This commit is contained in:
1 parent
8d3b6851fa
commit
aecb3eeb67
12 files changed
+215
-4
No files matched your search
@@ -1376,6 +1376,8 @@ convar_t *vr_highlight_actionables;
|
||||
convar_t *vr_headtorch;
|
||||
convar_t *vr_quick_crouchjump;
|
||||
convar_t *vr_stereo_side;
|
||||
convar_t *vr_gesture_triggered_use;
|
||||
convar_t *vr_use_gesture_boundary;
|
||||
|
||||
void Android_Vibrate( float duration, int channel, float intensity )
|
||||
{
|
||||
@@ -1439,6 +1441,8 @@ void VR_Init()
|
||||
vr_highlight_actionables = Cvar_Get( "vr_highlight_actionables", "1", CVAR_ARCHIVE, "Set to 0 to disable highlighting of actionable objects/entities" );
|
||||
vr_headtorch = Cvar_Get( "vr_headtorch", "0", CVAR_ARCHIVE, "Set to 1 to enable head-torch flashlight mode" );
|
||||
vr_quick_crouchjump = Cvar_Get( "vr_quick_crouchjump", "1", CVAR_ARCHIVE, "Set to 0 to disable quick crouch-jump mode (double clicking jump button triggers duck)" );
|
||||
vr_gesture_triggered_use = Cvar_Get( "vr_gesture_triggered_use", "0", CVAR_ARCHIVE, "Set to 0 to disable use gesture, 1 to enable" );
|
||||
vr_use_gesture_boundary = Cvar_Get( "vr_use_gesture_boundary", "0.35", CVAR_ARCHIVE, "Use gesture boundary" );
|
||||
|
||||
//Not to be changed by users, as it will be overwritten anyway
|
||||
vr_stereo_side = Cvar_Get( "vr_stereo_side", "0", CVAR_READ_ONLY, "Eye being drawn" );
|
||||
|
||||
@@ -58,6 +58,7 @@ extern vec3_t flashlightoffset;
|
||||
extern int ducked;
|
||||
|
||||
extern bool player_moving;
|
||||
extern int use_gesture_state;
|
||||
|
||||
bool isMultiplayer();
|
||||
bool isScopeEngaged();
|
||||
|
||||
@@ -26,6 +26,8 @@ extern convar_t *vr_controller_tracking_haptic;
|
||||
extern convar_t *vr_highlight_actionables;
|
||||
extern convar_t *vr_headtorch;
|
||||
extern convar_t *vr_quick_crouchjump;
|
||||
extern convar_t *vr_gesture_triggered_use;
|
||||
extern convar_t *vr_use_gesture_boundary;
|
||||
|
||||
//Used and updated continuously during rendering
|
||||
extern convar_t *vr_stereo_side;
|
||||
@@ -198,7 +198,50 @@ void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovr
|
||||
weaponangles[MELEE][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]);
|
||||
weaponangles[MELEE][PITCH] *= -1.0f;
|
||||
|
||||
//Use (Action)
|
||||
// Use (Action gesture)
|
||||
if (vr_gesture_triggered_use->integer) {
|
||||
bool gestureUseAllowed = !vr_weapon_stabilised->value;
|
||||
// Off-hand gesture
|
||||
float xOffset = hmdPosition[0] - pOffTracking->HeadPose.Pose.Position.x;
|
||||
float zOffset = hmdPosition[2] - pOffTracking->HeadPose.Pose.Position.z;
|
||||
float distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_OFF_HAND)) {
|
||||
sendButtonAction("+use2", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_OFF_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_OFF_HAND;
|
||||
}
|
||||
// Weapon-hand gesture
|
||||
xOffset = hmdPosition[0] - pDominantTracking->HeadPose.Pose.Position.x;
|
||||
zOffset = hmdPosition[2] - pDominantTracking->HeadPose.Pose.Position.z;
|
||||
distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_WEAPON_HAND)) {
|
||||
sendButtonAction("+use", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_WEAPON_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_WEAPON_HAND;
|
||||
}
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state = 0;
|
||||
}
|
||||
|
||||
// Use (Action button)
|
||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)) {
|
||||
|
||||
|
||||
@@ -209,7 +209,50 @@ void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ov
|
||||
weaponangles[MELEE][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]);
|
||||
weaponangles[MELEE][PITCH] *= -1.0f;
|
||||
|
||||
//Use (Action)
|
||||
// Use (Action gesture)
|
||||
if (vr_gesture_triggered_use->integer) {
|
||||
bool gestureUseAllowed = !vr_weapon_stabilised->value;
|
||||
// Off-hand gesture
|
||||
float xOffset = hmdPosition[0] - pOffTracking->HeadPose.Pose.Position.x;
|
||||
float zOffset = hmdPosition[2] - pOffTracking->HeadPose.Pose.Position.z;
|
||||
float distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_OFF_HAND)) {
|
||||
sendButtonAction("+use2", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_OFF_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_OFF_HAND;
|
||||
}
|
||||
// Weapon-hand gesture
|
||||
xOffset = hmdPosition[0] - pDominantTracking->HeadPose.Pose.Position.x;
|
||||
zOffset = hmdPosition[2] - pDominantTracking->HeadPose.Pose.Position.z;
|
||||
distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_WEAPON_HAND)) {
|
||||
sendButtonAction("+use", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_WEAPON_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_WEAPON_HAND;
|
||||
}
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state = 0;
|
||||
}
|
||||
|
||||
// Use (Action button)
|
||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)) {
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ vec3_t flashlightoffset;
|
||||
int ducked;
|
||||
|
||||
bool player_moving;
|
||||
int use_gesture_state;
|
||||
|
||||
bool stabiliseScope;
|
||||
char * g_pszBackpackWeapon;
|
||||
|
||||
@@ -210,7 +210,50 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||
weaponangles[MELEE][YAW] += (cl.refdef.cl_viewangles[YAW] - hmdorientation[YAW]);
|
||||
weaponangles[MELEE][PITCH] *= -1.0f;
|
||||
|
||||
//Use (Action)
|
||||
// Use (Action gesture)
|
||||
if (vr_gesture_triggered_use->integer) {
|
||||
bool gestureUseAllowed = !vr_weapon_stabilised->value;
|
||||
// Off-hand gesture
|
||||
float xOffset = hmdPosition[0] - pOffTracking->HeadPose.Pose.Position.x;
|
||||
float zOffset = hmdPosition[2] - pOffTracking->HeadPose.Pose.Position.z;
|
||||
float distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_OFF_HAND)) {
|
||||
sendButtonAction("+use2", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_OFF_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_OFF_HAND;
|
||||
}
|
||||
// Weapon-hand gesture
|
||||
xOffset = hmdPosition[0] - pDominantTracking->HeadPose.Pose.Position.x;
|
||||
zOffset = hmdPosition[2] - pDominantTracking->HeadPose.Pose.Position.z;
|
||||
distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_WEAPON_HAND)) {
|
||||
sendButtonAction("+use", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_WEAPON_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_WEAPON_HAND;
|
||||
}
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state = 0;
|
||||
}
|
||||
|
||||
// Use (Action button)
|
||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)) {
|
||||
|
||||
|
||||
@@ -426,6 +426,49 @@ void HandleInput_OneController( ovrInputStateTrackedRemote *pDominantTrackedRemo
|
||||
}
|
||||
}
|
||||
|
||||
// Use (Action gesture)
|
||||
if (vr_gesture_triggered_use->integer) {
|
||||
bool gestureUseAllowed = !vr_weapon_stabilised->value;
|
||||
// Off-hand gesture
|
||||
float xOffset = hmdPosition[0] - pOffTracking->HeadPose.Pose.Position.x;
|
||||
float zOffset = hmdPosition[2] - pOffTracking->HeadPose.Pose.Position.z;
|
||||
float distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_OFF_HAND)) {
|
||||
sendButtonAction("+use2", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_OFF_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_OFF_HAND;
|
||||
}
|
||||
// Weapon-hand gesture
|
||||
xOffset = hmdPosition[0] - pDominantTracking->HeadPose.Pose.Position.x;
|
||||
zOffset = hmdPosition[2] - pDominantTracking->HeadPose.Pose.Position.z;
|
||||
distanceToBody = sqrtf((xOffset * xOffset) + (zOffset * zOffset));
|
||||
if (gestureUseAllowed && (distanceToBody > vr_use_gesture_boundary->value)) {
|
||||
if (!(use_gesture_state & VR_USE_GESTURE_WEAPON_HAND)) {
|
||||
sendButtonAction("+use", true);
|
||||
}
|
||||
use_gesture_state |= VR_USE_GESTURE_WEAPON_HAND;
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state &= ~VR_USE_GESTURE_WEAPON_HAND;
|
||||
}
|
||||
} else {
|
||||
if (use_gesture_state & VR_USE_GESTURE_OFF_HAND) {
|
||||
sendButtonAction("+use2", false);
|
||||
}
|
||||
if (use_gesture_state & VR_USE_GESTURE_WEAPON_HAND) {
|
||||
sendButtonAction("+use", false);
|
||||
}
|
||||
use_gesture_state = 0;
|
||||
}
|
||||
|
||||
sendButtonAction("+speed", running ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -676,6 +676,7 @@
|
||||
#define IN_RELOAD (1U << 13)
|
||||
#define IN_ALT1 (1U << 14)
|
||||
#define IN_SCORE (1U << 15) // Used by client.dll for when scoreboard is held down
|
||||
#define IN_USE2 (1U << 16)
|
||||
|
||||
// Break Model Defines
|
||||
#define BREAK_TYPEMASK 0x4F
|
||||
@@ -703,6 +704,10 @@
|
||||
#define TE_BOUNCE_SHELL 1
|
||||
#define TE_BOUNCE_SHOTSHELL 2
|
||||
|
||||
// VR use gesture flags
|
||||
#define VR_USE_GESTURE_OFF_HAND 1
|
||||
#define VR_USE_GESTURE_WEAPON_HAND 2
|
||||
|
||||
// Rendering constants
|
||||
enum
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ typedef struct usercmd_s
|
||||
float sidemove; // Sideways velocity
|
||||
float upmove; // Upward velocity
|
||||
byte lightlevel; // Light level at spot where we are standing.
|
||||
unsigned short buttons; // Attack and move buttons
|
||||
int buttons; // Attack and move buttons
|
||||
byte impulse; // Impulse command issued
|
||||
byte weaponselect; // Current weapon id
|
||||
|
||||
|
||||
@@ -677,6 +677,14 @@ qboolean Delta_ParseField( char **delta_script, const delta_field_t *pInfo, delt
|
||||
*delta_script = COM_ParseFile( *delta_script, token );
|
||||
if( token[0] != ',' ) *delta_script = oldpos; // not a ','
|
||||
|
||||
// Ugly hack, but we need bigger size of buttons fields to be able to pass additional "use2" command state.
|
||||
// Based on tests should not cause problems with multiplayer, but allow this to be disabled just in case.
|
||||
int forceCompatibility = Cvar_Get("vr_force_network_compatibility", "0", CVAR_LATCH, "")->integer;
|
||||
if (!forceCompatibility && !Q_strcmp( pField->name, "buttons" )) {
|
||||
pField->flags = 8; // DT_INTEGER
|
||||
pField->bits = 17;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,9 @@ private:
|
||||
CMenuCheckBox headTorch;
|
||||
CMenuCheckBox handModels;
|
||||
CMenuCheckBox quickCrouchJump;
|
||||
CMenuCheckBox useGesture;
|
||||
CMenuSlider snapTurnAngle;
|
||||
CMenuSlider useGestureBoundary;
|
||||
|
||||
CMenuTable controllerList;
|
||||
CMenuControllerModesModel controllerListModel;
|
||||
@@ -117,6 +119,10 @@ void CMenuControls::_Init( void )
|
||||
headTorch.SetCoord( 320, 570 );
|
||||
headTorch.LinkCvar( "vr_headtorch" );
|
||||
|
||||
useGesture.SetNameAndStatus( "Gesture Triggered Use", "Toggles triggering of use action by gesture" );
|
||||
useGesture.SetCoord( 720, 570 );
|
||||
useGesture.LinkCvar( "vr_gesture_triggered_use" );
|
||||
|
||||
snapTurnAngle.SetNameAndStatus( "Snap/Smooth Turn: %.1f degrees", "Controller turn angle, < 10 is smooth turning per frame" );
|
||||
snapTurnAngle.Setup( 0.0, 90.0, 1.0f );
|
||||
snapTurnAngle.onChanged = CMenuEditable::WriteCvarCb;
|
||||
@@ -125,6 +131,14 @@ void CMenuControls::_Init( void )
|
||||
snapTurnAngle.SetDrawValue(true);
|
||||
snapTurnAngle.LinkCvar("vr_snapturn_angle");
|
||||
|
||||
useGestureBoundary.SetNameAndStatus( "Use Gesture Boundary", "Configures how far you need to reach to activate use gesture" );
|
||||
useGestureBoundary.Setup( 0.2, 0.5, 0.01f );
|
||||
useGestureBoundary.onChanged = CMenuEditable::WriteCvarCb;
|
||||
useGestureBoundary.SetCoord( 320, 750 );
|
||||
useGestureBoundary.SetSize( 520, 40 );
|
||||
useGestureBoundary.SetDrawValue(true);
|
||||
useGestureBoundary.LinkCvar("vr_use_gesture_boundary");
|
||||
|
||||
AddItem( controllerList );
|
||||
AddItem( hmdWalkDirection );
|
||||
AddItem( quickCrouchJump );
|
||||
@@ -132,6 +146,8 @@ void CMenuControls::_Init( void )
|
||||
AddItem( headTorch );
|
||||
AddItem( handModels );
|
||||
AddItem( snapTurnAngle );
|
||||
AddItem( useGesture );
|
||||
AddItem( useGestureBoundary );
|
||||
|
||||
}
|
||||
|
||||
@@ -162,6 +178,8 @@ void CMenuControls::SetConfig( )
|
||||
headTorch.WriteCvar();
|
||||
handModels.WriteCvar();
|
||||
snapTurnAngle.WriteCvar();
|
||||
useGesture.WriteCvar();
|
||||
useGestureBoundary.WriteCvar();
|
||||
|
||||
// We're done now, just close
|
||||
Hide();
|
||||
|
||||
Reference in new issue
Block a user