mirror of
https://github.com/DrBeef/RTCWQuest.git
synced 2025-04-22 23:11:02 +00:00
Scope work...
- Ability to detach the scope from the Mauser and use iron sights (use alt-fire) - Player moves at 1/3 normal speed when scope is active - Backpack will now provide grenades if player has them
This commit is contained in:
parent
f019166c08
commit
fc3a941f1f
12 changed files with 121 additions and 74 deletions
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.drbeef.rtcwquest"
|
||||
android:versionCode="10"
|
||||
android:versionName="0.10.0" android:installLocation="auto" >
|
||||
android:versionCode="11"
|
||||
android:versionName="0.11.0" android:installLocation="auto" >
|
||||
|
||||
<!-- Tell the system this app requires OpenGL ES 3.1. -->
|
||||
<uses-feature android:glEsVersion="0x00030001" android:required="true"/>
|
||||
|
|
|
@ -630,7 +630,7 @@ void ovrFramebuffer_ClearEdgeTexels( ovrFramebuffer * frameBuffer )
|
|||
|
||||
//Glide comfort mask in and out
|
||||
static float currentVLevel = 0.0f;
|
||||
if (player_moving)
|
||||
if (vr.player_moving)
|
||||
{
|
||||
if (currentVLevel < vr_comfort_mask->value)
|
||||
currentVLevel += vr_comfort_mask->value * 0.05;
|
||||
|
@ -890,7 +890,8 @@ void RTCWVR_Vibrate( float duration, int channel, float intensity )
|
|||
vibration_channel_intensity[channel] = intensity;
|
||||
}
|
||||
|
||||
void VR_GetMove( float *forward, float *side, float *pos_forward, float *pos_side, float *up, float *yaw, float *pitch, float *roll )
|
||||
void RTCWVR_GetMove(float *forward, float *side, float *pos_forward, float *pos_side, float *up,
|
||||
float *yaw, float *pitch, float *roll)
|
||||
{
|
||||
*forward = remote_movementForward;
|
||||
*pos_forward = positional_movementForward;
|
||||
|
|
|
@ -7,6 +7,7 @@ typedef struct {
|
|||
float fov;
|
||||
qboolean weapon_stabilised;
|
||||
qboolean right_handed;
|
||||
qboolean player_moving;
|
||||
|
||||
vec3_t hmdposition;
|
||||
vec3_t hmdposition_last; // Don't use this, it is just for calculating delta!
|
||||
|
@ -26,9 +27,11 @@ typedef struct {
|
|||
vec3_t weaponoffset_history[NUM_WEAPON_SAMPLES];
|
||||
float weaponoffset_history_timestamp[NUM_WEAPON_SAMPLES];
|
||||
|
||||
qboolean scopeengaged; // Scope has been engaged on a scoped weapon
|
||||
qboolean scopeready; // Scope can be engaged
|
||||
qboolean scopedweapon; // Weapon supports scope
|
||||
//Lots of scope weapon stuff
|
||||
qboolean scopeengaged; // Scope has been engaged on a scoped weapon
|
||||
qboolean scopedweapon; // Weapon scope is available
|
||||
qboolean scopedetached; // Scope has been detached from weapon
|
||||
qboolean detachablescope; // Scope can be detached from weapon
|
||||
|
||||
qboolean velocitytriggered; // Weapon attack triggered by velocity (knife)
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@ ovrTracking2 tracking;
|
|||
#define DUCK_CROUCHED 2
|
||||
int ducked;
|
||||
|
||||
qboolean player_moving;
|
||||
int resyncClientYawWithGameYaw;
|
||||
|
||||
vr_client_info_t vr;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
//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.22
|
||||
#define VELOCITY_TRIGGER 1.8
|
||||
|
||||
ovrInputStateTrackedRemote leftTrackedRemoteState_old;
|
||||
|
|
|
@ -36,7 +36,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
|
||||
static qboolean dominantGripPushed = false;
|
||||
static float dominantGripPushTime = 0.0f;
|
||||
static int grabMeleeWeapon = 0;
|
||||
static int grabBackpackWeapon = 0;
|
||||
static bool canUseBackpack = false;
|
||||
|
||||
|
||||
|
@ -132,18 +132,17 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
}
|
||||
}
|
||||
|
||||
//Engage scope if conditions are right
|
||||
vr.scopeready = vr.weapon_stabilised && (distanceToHMD < SCOPE_ENGAGE_DISTANCE) && vr.scopedweapon;
|
||||
if (!vr.scopeengaged && vr.scopeready)
|
||||
{
|
||||
sendButtonActionSimple("weapalt");
|
||||
}
|
||||
else if (vr.scopeengaged && !vr.scopeready)
|
||||
{
|
||||
//Set this here so we don't retrigger scope by accident too soon
|
||||
vr.scopeengaged = qfalse;
|
||||
sendButtonActionSimple("weapalt");
|
||||
RTCWVR_ResyncClientYawWithGameYaw();
|
||||
if (vr.scopedweapon && !vr.scopedetached) {
|
||||
//Engage scope if conditions are right
|
||||
qboolean scopeready = vr.weapon_stabilised && (distanceToHMD < SCOPE_ENGAGE_DISTANCE);
|
||||
if (!vr.scopeengaged && scopeready) {
|
||||
sendButtonActionSimple("weapalt");
|
||||
} else if (vr.scopeengaged && !scopeready) {
|
||||
//Set this here so we don't retrigger scope by accident too soon
|
||||
vr.scopeengaged = qfalse;
|
||||
sendButtonActionSimple("weapalt");
|
||||
RTCWVR_ResyncClientYawWithGameYaw();
|
||||
}
|
||||
}
|
||||
|
||||
//dominant hand stuff first
|
||||
|
@ -201,7 +200,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) {
|
||||
canUseBackpack = false;
|
||||
}
|
||||
else if (!canUseBackpack && grabMeleeWeapon == 0) {
|
||||
else if (!canUseBackpack && grabBackpackWeapon == 0) {
|
||||
int channel = (vr_control_scheme->integer >= 10) ? 0 : 1;
|
||||
RTCWVR_Vibrate(40, channel, 0.5); // vibrate to let user know they can switch
|
||||
|
||||
|
@ -214,7 +213,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
dominantGripPushed = (pDominantTrackedRemoteNew->Buttons &
|
||||
ovrButton_GripTrigger) != 0;
|
||||
|
||||
if (grabMeleeWeapon == 0)
|
||||
if (grabBackpackWeapon == 0)
|
||||
{
|
||||
if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) {
|
||||
|
||||
|
@ -229,17 +228,17 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
}
|
||||
} else{
|
||||
if (dominantGripPushed) {
|
||||
//Initiate knife from backpack mode
|
||||
sendButtonActionSimple("weapon 1");
|
||||
//Initiate grenade from backpack mode
|
||||
sendButtonActionSimple("weaponbank 6");
|
||||
int channel = (vr_control_scheme->integer >= 10) ? 0 : 1;
|
||||
RTCWVR_Vibrate(80, channel, 0.8); // vibrate to let user know they switched
|
||||
grabMeleeWeapon = 1;
|
||||
grabBackpackWeapon = 1;
|
||||
}
|
||||
}
|
||||
} else if (grabMeleeWeapon == 1 && !dominantGripPushed) {
|
||||
} else if (grabBackpackWeapon == 1 && !dominantGripPushed) {
|
||||
//Restores last used weapon if possible
|
||||
sendButtonActionSimple("weaplastused");
|
||||
grabMeleeWeapon = 0;
|
||||
grabBackpackWeapon = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -290,15 +289,29 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
//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 && !vr.scopedweapon && !grabMeleeWeapon)
|
||||
if (!firingPrimary && dominantGripPushed && (GetTimeInMilliSeconds() - dominantGripPushTime) > vr_reloadtimeoutms->integer && !grabBackpackWeapon)
|
||||
{
|
||||
//Fire Secondary
|
||||
if (((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger))
|
||||
&& (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger))
|
||||
{
|
||||
sendButtonActionSimple("weapalt");
|
||||
if (!vr.scopedweapon) {
|
||||
if (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) {
|
||||
sendButtonActionSimple("weapalt");
|
||||
}
|
||||
}
|
||||
else if (vr.detachablescope)
|
||||
{
|
||||
if (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) {
|
||||
//See if we are able to detach the scope
|
||||
sendButtonActionSimple("weapdetachscope");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Just ignore grip and fire
|
||||
firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger);
|
||||
sendButtonAction("+attack", firingPrimary);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -379,14 +392,15 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
|||
float x = nlf * pOffTrackedRemoteNew->Joystick.x;
|
||||
float y = nlf * pOffTrackedRemoteNew->Joystick.y;
|
||||
|
||||
player_moving = (fabs(x) + fabs(y)) > 0.05f;
|
||||
vr.player_moving = (fabs(x) + fabs(y)) > 0.05f;
|
||||
|
||||
//Adjust to be off-hand controller oriented
|
||||
vec2_t v;
|
||||
rotateAboutOrigin(x, y, controllerYawHeading, v);
|
||||
|
||||
remote_movementSideways = v[0];
|
||||
remote_movementForward = v[1];
|
||||
//Move a lot slower if scope is engaged
|
||||
remote_movementSideways = v[0] * (vr.scopeengaged ? 0.3f : 1.0f);
|
||||
remote_movementForward = v[1] * (vr.scopeengaged ? 0.3f : 1.0f);
|
||||
ALOGV(" remote_movementSideways: %f, remote_movementForward: %f",
|
||||
remote_movementSideways,
|
||||
remote_movementForward);
|
||||
|
|
|
@ -164,7 +164,9 @@ void HandleInput_WeaponAlign( ovrInputStateTrackedRemote *pDominantTrackedRemote
|
|||
if (!itemSwitched) {
|
||||
if (between(0.8f, pDominantTrackedRemoteNew->Joystick.x, 1.0f))
|
||||
{
|
||||
item_index = (item_index+1)%7;
|
||||
item_index++;
|
||||
if (item_index == 7)
|
||||
item_index = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -196,15 +198,16 @@ void HandleInput_WeaponAlign( ovrInputStateTrackedRemote *pDominantTrackedRemote
|
|||
}
|
||||
|
||||
|
||||
if (pDominantTrackedRemoteNew->Joystick.y > 0.5f)
|
||||
{
|
||||
*(items[item_index]) += item_inc[item_index];
|
||||
}
|
||||
if (between(-0.2f, pDominantTrackedRemoteNew->Joystick.x, 0.2f))
|
||||
{
|
||||
if (pDominantTrackedRemoteNew->Joystick.y > 0.6f) {
|
||||
*(items[item_index]) += item_inc[item_index];
|
||||
}
|
||||
|
||||
if (pDominantTrackedRemoteNew->Joystick.y < -0.5f)
|
||||
{
|
||||
*(items[item_index]) -= item_inc[item_index];
|
||||
}
|
||||
if (pDominantTrackedRemoteNew->Joystick.y < -0.6f) {
|
||||
*(items[item_index]) -= item_inc[item_index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(vr.test_name, "%s: %.2f", item_names[item_index], *(items[item_index]));
|
||||
|
|
|
@ -440,6 +440,7 @@ static consoleCommand_t commands[] = {
|
|||
{ "weapnext", CG_NextWeapon_f },
|
||||
{ "weapprev", CG_PrevWeapon_f },
|
||||
{ "weapalt", CG_AltWeapon_f },
|
||||
{ "weapdetachscope", CG_WeaponDetachScope_f },
|
||||
{ "weapon", CG_Weapon_f },
|
||||
{ "weaponbank", CG_WeaponBank_f },
|
||||
{ "itemnext", CG_NextItem_f },
|
||||
|
|
|
@ -2051,7 +2051,7 @@ static void CG_DrawWeapReticle( void ) {
|
|||
//vec4_t snoopercolor = {0.7, .8, 0.7, 0}; // greenish
|
||||
vec4_t snoopercolor = {0.7, .8, 0.7, 1}; // greenish
|
||||
|
||||
float indent = 0.265;
|
||||
float indent = 0.26;
|
||||
float X_WIDTH=640;
|
||||
float Y_HEIGHT=480;
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ If you have questions concerning this license or the applicable additional terms
|
|||
#define WEAPON_SELECT_TIME 1400
|
||||
#define HOLDABLE_SELECT_TIME 1400 //----(SA) for drawing holdable icons
|
||||
#define ITEM_SCALEUP_TIME 1000
|
||||
#define ZOOM_TIME 150
|
||||
#define ZOOM_TIME 100 // Speed the zoom up for VR
|
||||
#define ITEM_BLOB_TIME 200
|
||||
#define MUZZLE_FLASH_TIME 30 //----(SA)
|
||||
#define SINK_TIME 1000 // time for fragments to sink into ground before going away
|
||||
|
@ -2012,6 +2012,7 @@ void CG_LastWeaponUsed_f( void ); //----(SA) added
|
|||
void CG_NextWeaponInBank_f( void ); //----(SA) added
|
||||
void CG_PrevWeaponInBank_f( void ); //----(SA) added
|
||||
void CG_AltWeapon_f( void );
|
||||
void CG_WeaponDetachScope_f( void );
|
||||
void CG_NextWeapon_f( void );
|
||||
void CG_PrevWeapon_f( void );
|
||||
void CG_Weapon_f( void );
|
||||
|
|
|
@ -3083,7 +3083,7 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
|
|||
// add the scope model to the rifle if you've got it
|
||||
if ( isPlayer && !cg.renderingThirdPerson ) { // (SA) for now just do it on the first person weapons
|
||||
if ( weaponNum == WP_MAUSER ) {
|
||||
if ( COM_BitCheck( cg.predictedPlayerState.weapons, WP_SNIPERRIFLE ) ) {
|
||||
if ( COM_BitCheck( cg.predictedPlayerState.weapons, WP_SNIPERRIFLE ) && !cgVR->scopedetached) {
|
||||
barrel.hModel = weapon->modModel[0];
|
||||
if ( barrel.hModel ) {
|
||||
CG_PositionEntityOnTag( &barrel, &gun, "tag_scope", 0, NULL );
|
||||
|
@ -3444,6 +3444,35 @@ void CG_AddViewWeapon( playerState_t *ps ) {
|
|||
VectorScale( hand.axis[i], scale, hand.axis[i] );
|
||||
}
|
||||
|
||||
|
||||
//Set some important flags based on the current weapon
|
||||
switch ( ps->weapon ) {
|
||||
case WP_KNIFE:
|
||||
cgVR->velocitytriggered = qtrue;
|
||||
cgVR->scopedweapon = qfalse;
|
||||
break;
|
||||
case WP_MAUSER:
|
||||
cgVR->velocitytriggered = qfalse;
|
||||
cgVR->scopedweapon = qtrue;
|
||||
cgVR->detachablescope = qtrue;
|
||||
break;
|
||||
case WP_SNIPERRIFLE:
|
||||
case WP_GARAND:
|
||||
case WP_SNOOPERSCOPE:
|
||||
case WP_FG42:
|
||||
case WP_FG42SCOPE:
|
||||
cgVR->velocitytriggered = qfalse;
|
||||
cgVR->scopedweapon = qtrue;
|
||||
cgVR->scopedetached = qfalse;
|
||||
cgVR->detachablescope = qfalse;
|
||||
break;
|
||||
default:
|
||||
cgVR->velocitytriggered = qfalse;
|
||||
cgVR->scopedweapon = qfalse;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// add everything onto the hand
|
||||
CG_AddPlayerWeapon( &hand, ps, &cg.predictedPlayerEntity );
|
||||
// Ridah
|
||||
|
@ -3454,28 +3483,6 @@ 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;
|
||||
}
|
||||
|
||||
//Add beam
|
||||
static centity_t beam_entity;
|
||||
VectorCopy(hand.origin, beam_entity.currentState.pos.trBase); //beam origin
|
||||
|
@ -4291,6 +4298,22 @@ void CG_FinishWeaponChange( int lastweap, int newweap ) {
|
|||
cg.weaponSelect = newweap;
|
||||
}
|
||||
|
||||
void CG_WeaponDetachScope_f( void ) {
|
||||
int original;
|
||||
|
||||
original = cg.weaponSelect;
|
||||
|
||||
//Can only detach the scope from the mauser
|
||||
if (original != WP_MAUSER)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CG_PlaySwitchSound( WP_MAUSER, WP_MAUSER );
|
||||
|
||||
cgVR->scopedetached = !cgVR->scopedetached;
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
CG_AltfireWeapon_f
|
||||
|
|
|
@ -386,7 +386,8 @@ cvar_t *cl_recoilPitch;
|
|||
|
||||
#ifdef __ANDROID__
|
||||
|
||||
void VR_GetMove( float *forward, float *side, float *pos_forward, float *pos_side, float *up, float *yaw, float *pitch, float *roll );
|
||||
void RTCWVR_GetMove(float *forward, float *side, float *pos_forward, float *pos_side, float *up,
|
||||
float *yaw, float *pitch, float *roll);
|
||||
|
||||
typedef struct {
|
||||
float forward;
|
||||
|
@ -815,7 +816,8 @@ usercmd_t CL_CreateCmd( void ) {
|
|||
|
||||
#ifdef __ANDROID__
|
||||
|
||||
VR_GetMove(&new_move.forward, &new_move.side, &new_move.pos_forward, &new_move.pos_side, &new_move.up, &new_move.yaw, &new_move.pitch, &new_move.roll);
|
||||
RTCWVR_GetMove(&new_move.forward, &new_move.side, &new_move.pos_forward, &new_move.pos_side,
|
||||
&new_move.up, &new_move.yaw, &new_move.pitch, &new_move.roll);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue