Blocked Saber Pause

blocked saber will pause for a short time to indicate it was blocked
implemented crouch toggle
set cg_debugSaberCombat to 1 to show red saber when it is blocked too
This commit is contained in:
Simon 2022-11-11 23:43:50 +00:00
parent 42a79f4b13
commit 7a921c5e38
9 changed files with 45 additions and 31 deletions

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.drbeef.jk2quest"
android:versionCode="27"
android:versionName="0.3.8" android:installLocation="auto" >
android:versionCode="28"
android:versionName="0.3.9" android:installLocation="auto" >
<!-- Tell the system this app requires OpenGL ES 3.1. -->
<uses-feature android:glEsVersion="0x00030002" android:required="true"/>

View file

@ -1323,6 +1323,7 @@ void JKVR_Init()
vr_force_velocity_trigger = Cvar_Get( "vr_force_velocity_trigger", "2.0", CVAR_ARCHIVE);
vr_two_handed_weapons = Cvar_Get ("vr_two_handed_weapons", "1", CVAR_ARCHIVE);
vr_force_motion_controlled = Cvar_Get ("vr_force_motion_controlled", "1", CVAR_ARCHIVE);
vr_crouch_toggle = Cvar_Get ("vr_crouch_toggle", "0", CVAR_ARCHIVE);
cvar_t *expanded_menu_enabled = Cvar_Get ("expanded_menu_enabled", "0", CVAR_ARCHIVE);
if (FS_FileExists("expanded_menu.pk3")) {

View file

@ -14,7 +14,9 @@ typedef struct {
bool weapon_stabilised;
bool right_handed;
bool player_moving;
bool crouched;
int cgzoommode;
int saberBlockDebounce; // Amount of time after player is blocked that the saber position is fixed
int forceid;
@ -45,7 +47,7 @@ typedef struct {
vec3_t weaponoffset_history[NUM_WEAPON_SAMPLES];
float weaponoffset_history_timestamp[NUM_WEAPON_SAMPLES];
int item_selector = 0; // 1 - weapons/gadgets/saber stance, 2 - Force powers
int item_selector; // 1 - weapons/gadgets/saber stance, 2 - Force powers
bool velocitytriggered;
float primaryswingvelocity;

View file

@ -13,4 +13,5 @@ extern cvar_t *vr_weapon_velocity_trigger;
extern cvar_t *vr_force_velocity_trigger;
extern cvar_t *vr_two_handed_weapons;
extern cvar_t *vr_force_motion_controlled;
extern cvar_t *vr_crouch_toggle;

View file

@ -33,6 +33,7 @@ cvar_t *vr_weapon_velocity_trigger;
cvar_t *vr_force_velocity_trigger;
cvar_t *vr_two_handed_weapons;
cvar_t *vr_force_motion_controlled;
cvar_t *vr_crouch_toggle;
ovrInputStateTrackedRemote leftTrackedRemoteState_old;
ovrInputStateTrackedRemote leftTrackedRemoteState_new;

View file

@ -101,8 +101,12 @@ void HandleInput_Default( ovrInputStateGamepad *pFootTrackingNew, ovrInputStateG
{
//Set gun angles - We need to calculate all those we might need (including adjustments) for the client to then take its pick
vec3_t rotation = {0};
rotation[PITCH] = 45;
QuatToYawPitchRoll(pWeapon->HeadPose.Pose.Orientation, rotation, vr.weaponangles_saber);
//if we are in saber block debounce, don't update the angles
if (vr.saberBlockDebounce < cl.serverTime) {
rotation[PITCH] = 45;
QuatToYawPitchRoll(pWeapon->HeadPose.Pose.Orientation, rotation, vr.weaponangles_saber);
}
rotation[PITCH] = vr_weapon_pitchadjust->value;
QuatToYawPitchRoll(pWeapon->HeadPose.Pose.Orientation, rotation, vr.weaponangles);
@ -295,14 +299,16 @@ void HandleInput_Default( ovrInputStateGamepad *pFootTrackingNew, ovrInputStateG
VectorCopy(vr.weaponoffset, vr.weaponoffset_history[0]);
vr.weaponoffset_history_timestamp[0] = vr.weaponoffset_timestamp;
VectorSet(vr.weaponposition, pWeapon->HeadPose.Pose.Position.x,
pWeapon->HeadPose.Pose.Position.y, pWeapon->HeadPose.Pose.Position.z);
if (vr.saberBlockDebounce < cl.serverTime) {
VectorSet(vr.weaponposition, pWeapon->HeadPose.Pose.Position.x,
pWeapon->HeadPose.Pose.Position.y, pWeapon->HeadPose.Pose.Position.z);
///Weapon location relative to view
VectorSet(vr.weaponoffset, pWeapon->HeadPose.Pose.Position.x,
pWeapon->HeadPose.Pose.Position.y, pWeapon->HeadPose.Pose.Position.z);
VectorSubtract(vr.weaponoffset, vr.hmdposition, vr.weaponoffset);
vr.weaponoffset_timestamp = Sys_Milliseconds();
///Weapon location relative to view
VectorSet(vr.weaponoffset, pWeapon->HeadPose.Pose.Position.x,
pWeapon->HeadPose.Pose.Position.y, pWeapon->HeadPose.Pose.Position.z);
VectorSubtract(vr.weaponoffset, vr.hmdposition, vr.weaponoffset);
vr.weaponoffset_timestamp = Sys_Milliseconds();
}
vec3_t velocity;
VectorSet(velocity, pWeapon->HeadPose.LinearVelocity.x,
@ -644,7 +650,15 @@ void HandleInput_Default( ovrInputStateGamepad *pFootTrackingNew, ovrInputStateG
if ((secondaryButtonsNew & secondaryThumb) !=
(secondaryButtonsOld & secondaryThumb)) {
sendButtonAction("+movedown", (secondaryButtonsNew & secondaryThumb));
if (vr_crouch_toggle->integer)
{
vr.crouched = !vr.crouched;
sendButtonAction("+movedown", vr.crouched);
}
else
{
sendButtonAction("+movedown", (secondaryButtonsNew & secondaryThumb));
}
}
//Use

View file

@ -1658,6 +1658,10 @@ Ghoul2 Insert End
cg.weaponSelect = WP_BRYAR_PISTOL;
cg.forcepowerSelect = FP_HEAL;
//reset some of the vr stuff here as we know we are starting afresh
vr->saberBlockDebounce = 0;
vr->crouched = false;
if (gbUseTheseValuesFromLoadSave)
{
gbUseTheseValuesFromLoadSave = qfalse; // ack

View file

@ -4670,26 +4670,10 @@ Ghoul2 Insert End
saber_colors_t saberColor = client->ps.saberColor;
if (cg_debugSaberCombat.integer)
{
if (client->ps.saberLockEnemy != ENTITYNUM_NONE)
if (vr->saberBlockDebounce > cg.time)
{
saberColor = SABER_RED;
}
else if (client->ps.saberBlocked)
{
saberColor = SABER_ORANGE;
}
else if ( client->ps.saberDamageDebounceTime > level.time )
{
saberColor = SABER_YELLOW;
}
else if (saberTrail->inAction)
{
saberColor = SABER_GREEN;
}
else
{
saberColor = SABER_BLUE;
}
}
#define SABER_TRAIL_TIME 60.0f
@ -4802,8 +4786,15 @@ Ghoul2 Insert End
// will get rendered properly in a mirror...not sure if this is necessary??
CG_DoSaber( org_, axis_[0], length, client->ps.saberLengthMax, saberColor, renderfx );
if (CG_getPlayer1stPersonSaber(cent) &&
cent->gent->client->ps.saberEventFlags & (SEF_BLOCKED|SEF_PARRIED) &&
vr->saberBlockDebounce < cg.time)
{
vr->saberBlockDebounce = cg.time + 200;
}
if (CG_getPlayer1stPersonSaber(cent) &&
cent->gent->client->ps.saberLockEnemy != ENTITYNUM_NONE)
cent->gent->client->ps.saberLockEnemy != ENTITYNUM_NONE)
{
refEntity_t hiltEnt;
memset( &hiltEnt, 0, sizeof(refEntity_t) );

Binary file not shown.