mirror of
https://github.com/DrBeef/RTCWQuest.git
synced 2025-02-28 14:21:16 +00:00
Make knife true 6DoF weapon
This commit is contained in:
parent
d5a0bd09a2
commit
04352f89be
6 changed files with 51 additions and 20 deletions
|
@ -30,6 +30,10 @@ typedef struct {
|
|||
qboolean scopeready; // Scope can be engaged
|
||||
qboolean scopedweapon; // Weapon supports scope
|
||||
|
||||
qboolean velocitytriggered; // Weapon attack triggered by velocity (knife)
|
||||
|
||||
|
||||
|
||||
vec3_t offhandangles;
|
||||
vec3_t offhandoffset;
|
||||
} vr_client_info_t;
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
//New control scheme definitions to be defined L1VR_SurfaceView.c enumeration
|
||||
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_new;
|
||||
|
|
|
@ -162,6 +162,22 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
vr.weaponoffset[2] = pDominantTracking->HeadPose.Pose.Position.z - vr.hmdposition[2];
|
||||
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)
|
||||
{
|
||||
float z = pOffTracking->HeadPose.Pose.Position.z - pDominantTracking->HeadPose.Pose.Position.z;
|
||||
|
@ -287,7 +303,8 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
else
|
||||
{
|
||||
//Fire Primary
|
||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
||||
if (!vr.velocitytriggered && // Don't fire velocity triggered weapons
|
||||
(pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) {
|
||||
|
||||
firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger);
|
||||
|
|
|
@ -2,10 +2,8 @@
|
|||
|
||||
RTCW_BASE_CFLAGS = \
|
||||
-fsigned-char \
|
||||
-march=armv7-a -mfloat-abi=softfp \
|
||||
-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 \
|
||||
-DAUTOAIM
|
||||
-Ofast -fomit-frame-pointer -ffast-math -fno-strict-aliasing -fstrength-reduce -ftree-vectorize -fsingle-precision-constant \
|
||||
-pipe -DPANDORA -DHAVE_GLES -DARM -DC_ONLY
|
||||
|
||||
#-DNEON -mfpu=neon
|
||||
|
||||
|
|
|
@ -3223,6 +3223,28 @@ void CG_AddViewWeapon( playerState_t *ps ) {
|
|||
// add the foot
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -3303,6 +3303,9 @@ if ( pm->ps->weapon == WP_AKIMBO ) {
|
|||
}
|
||||
|
||||
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_GRENADE_LAUNCHER:
|
||||
case WP_GRENADE_PINEAPPLE:
|
||||
|
|
Loading…
Reference in a new issue