Make knife true 6DoF weapon

This commit is contained in:
Simon 2020-07-12 16:04:26 +01:00
parent d5a0bd09a2
commit 04352f89be
6 changed files with 51 additions and 20 deletions

View file

@ -30,6 +30,10 @@ typedef struct {
qboolean scopeready; // Scope can be engaged qboolean scopeready; // Scope can be engaged
qboolean scopedweapon; // Weapon supports scope qboolean scopedweapon; // Weapon supports scope
qboolean velocitytriggered; // Weapon attack triggered by velocity (knife)
vec3_t offhandangles; vec3_t offhandangles;
vec3_t offhandoffset; vec3_t offhandoffset;
} vr_client_info_t; } vr_client_info_t;

View file

@ -7,7 +7,8 @@
//New control scheme definitions to be defined L1VR_SurfaceView.c enumeration //New control scheme definitions to be defined L1VR_SurfaceView.c enumeration
enum control_scheme; enum control_scheme;
#define SCOPE_ENGAGE_DISTANCE 0.3 #define SCOPE_ENGAGE_DISTANCE 0.3
#define VELOCITY_TRIGGER 2.0
ovrInputStateTrackedRemote leftTrackedRemoteState_old; ovrInputStateTrackedRemote leftTrackedRemoteState_old;
ovrInputStateTrackedRemote leftTrackedRemoteState_new; ovrInputStateTrackedRemote leftTrackedRemoteState_new;

View file

@ -162,6 +162,22 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
vr.weaponoffset[2] = pDominantTracking->HeadPose.Pose.Position.z - vr.hmdposition[2]; vr.weaponoffset[2] = pDominantTracking->HeadPose.Pose.Position.z - vr.hmdposition[2];
vr.weaponoffset_timestamp = Sys_Milliseconds( ); vr.weaponoffset_timestamp = Sys_Milliseconds( );
//Does weapon velocity trigger attack (knife) and is it fast enough
if (vr.velocitytriggered)
{
static qboolean fired = qfalse;
float velocity = sqrtf(powf(pDominantTracking->HeadPose.LinearVelocity.x, 2) +
powf(pDominantTracking->HeadPose.LinearVelocity.y, 2) +
powf(pDominantTracking->HeadPose.LinearVelocity.z, 2));
ALOGV(" Velocity: %f", velocity);
if (fired != (velocity > VELOCITY_TRIGGER)) {
sendButtonAction("+attack", (velocity > VELOCITY_TRIGGER));
fired = (velocity > VELOCITY_TRIGGER);
}
}
if (vr.weapon_stabilised) if (vr.weapon_stabilised)
{ {
float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z; float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z;
@ -287,7 +303,8 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
else else
{ {
//Fire Primary //Fire Primary
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) != if (!vr.velocitytriggered && // Don't fire velocity triggered weapons
(pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
(pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) { (pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) {
firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger); firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger);

View file

@ -2,10 +2,8 @@
RTCW_BASE_CFLAGS = \ RTCW_BASE_CFLAGS = \
-fsigned-char \ -fsigned-char \
-march=armv7-a -mfloat-abi=softfp \ -Ofast -fomit-frame-pointer -ffast-math -fno-strict-aliasing -fstrength-reduce -ftree-vectorize -fsingle-precision-constant \
-DNDEBUG -DNDEBUG -Ofast -fomit-frame-pointer -ffast-math -fno-strict-aliasing -fstrength-reduce -ftree-vectorize -fsingle-precision-constant \ -pipe -DPANDORA -DHAVE_GLES -DARM -DC_ONLY
-pipe -DPANDORA -DHAVE_GLES -DARM -DC_ONLY \
-DAUTOAIM
#-DNEON -mfpu=neon #-DNEON -mfpu=neon

View file

@ -3223,6 +3223,28 @@ void CG_AddViewWeapon( playerState_t *ps ) {
// add the foot // add the foot
CG_AddPlayerFoot( &hand, ps, &cg.predictedPlayerEntity ); CG_AddPlayerFoot( &hand, ps, &cg.predictedPlayerEntity );
//Set some important flags based on the current weapon
switch ( ps->weapon ) {
case WP_KNIFE:
cgVR->velocitytriggered = qtrue;
cgVR->scopedweapon = qfalse;
break;
case WP_GARAND:
case WP_SNIPERRIFLE:
case WP_MAUSER:
case WP_SNOOPERSCOPE:
case WP_FG42:
case WP_FG42SCOPE:
cgVR->velocitytriggered = qfalse;
cgVR->scopedweapon = qtrue;
break;
default:
cgVR->velocitytriggered = qfalse;
cgVR->scopedweapon = qfalse;
break;
}
cg.predictedPlayerEntity.lastWeaponClientFrame = cg.clientFrame; cg.predictedPlayerEntity.lastWeaponClientFrame = cg.clientFrame;
} }
@ -4003,20 +4025,6 @@ void CG_FinishWeaponChange( int lastweap, int newweap ) {
} }
} }
switch ( newweap ) {
case WP_GARAND:
case WP_SNIPERRIFLE:
case WP_MAUSER:
case WP_SNOOPERSCOPE:
case WP_FG42:
case WP_FG42SCOPE:
cgVR->scopedweapon = qtrue;
break;
default:
cgVR->scopedweapon = qfalse;
break;
}
cg.weaponSelect = newweap; cg.weaponSelect = newweap;
} }

View file

@ -3303,6 +3303,9 @@ if ( pm->ps->weapon == WP_AKIMBO ) {
} }
switch ( pm->ps->weapon ) { switch ( pm->ps->weapon ) {
case WP_KNIFE:
//Play no animation for the knife (as it is physical stabby stabby)
break;
case WP_MAUSER: case WP_MAUSER:
case WP_GRENADE_LAUNCHER: case WP_GRENADE_LAUNCHER:
case WP_GRENADE_PINEAPPLE: case WP_GRENADE_PINEAPPLE: