mirror of
https://github.com/DrBeef/RTCWQuest.git
synced 2025-04-22 23:11:02 +00:00
Comfort vignette
This commit is contained in:
parent
89cc849147
commit
0c564179ea
10 changed files with 133 additions and 2 deletions
|
@ -855,6 +855,11 @@ void updateHMDOrientation()
|
|||
|
||||
//Keep this for our records
|
||||
VectorCopy(vr.hmdorientation, vr.hmdorientation_last);
|
||||
|
||||
// View yaw delta
|
||||
float clientview_yaw = vr.clientviewangles[YAW] - vr.hmdorientation[YAW];
|
||||
vr.clientview_yaw_delta = vr.clientview_yaw_last - clientview_yaw;
|
||||
vr.clientview_yaw_last = clientview_yaw;
|
||||
}
|
||||
|
||||
void setHMDPosition( float x, float y, float z )
|
||||
|
@ -1489,6 +1494,7 @@ void RTCWVR_Init()
|
|||
vr_lasersight = Cvar_Get( "vr_lasersight", "0", CVAR_ARCHIVE);
|
||||
vr_teleport = Cvar_Get( "vr_teleport", "0", CVAR_ARCHIVE);
|
||||
vr_virtual_stock = Cvar_Get( "vr_virtual_stock", "0", CVAR_ARCHIVE);
|
||||
vr_comfort_vignette = Cvar_Get ("vr_comfort_vignette", "0.0", CVAR_ARCHIVE);
|
||||
|
||||
//Defaults
|
||||
vr_control_scheme = Cvar_Get( "vr_control_scheme", "0", CVAR_ARCHIVE);
|
||||
|
|
|
@ -56,6 +56,10 @@ typedef struct {
|
|||
|
||||
vec3_t offhandoffset;
|
||||
|
||||
vec3_t clientviewangles; //orientation in the client - we use this in the cgame
|
||||
float clientview_yaw_last; // Don't use this, it is just for calculating delta!
|
||||
float clientview_yaw_delta;
|
||||
|
||||
//
|
||||
// Teleport Stuff
|
||||
//
|
||||
|
|
|
@ -9,6 +9,7 @@ cvar_t *vr_lasersight;
|
|||
cvar_t *vr_control_scheme;
|
||||
cvar_t *vr_teleport;
|
||||
cvar_t *vr_virtual_stock;
|
||||
cvar_t *vr_comfort_vignette;
|
||||
cvar_t *vr_switch_sticks;
|
||||
cvar_t *vr_cinematic_stereo;
|
||||
cvar_t *vr_screen_dist;
|
||||
|
|
|
@ -3389,7 +3389,82 @@ static void CG_ScreenFade( void ) {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
CG_DrawVignette
|
||||
==============
|
||||
*/
|
||||
float currentComfortVignetteValue = 0.0f;
|
||||
float filteredViewYawDelta = 0.0f;
|
||||
|
||||
static void CG_DrawVignette( void )
|
||||
{
|
||||
playerState_t *ps;
|
||||
ps = &cg.snap->ps;
|
||||
|
||||
float vr_comfort_vignette = 0;
|
||||
char buf[32];
|
||||
trap_Cvar_VariableStringBuffer("vr_comfort_vignette", buf, sizeof(buf)); // defined in VrCvars.h
|
||||
vr_comfort_vignette = atof(buf);
|
||||
if (vr_comfort_vignette <= 0.0f || vr_comfort_vignette > 1.0f || cg.zoomedScope || cg.zoomedBinoc)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
qboolean isMoving = VectorLength(cg.predictedPlayerState.velocity) > 30.0;
|
||||
// When player is in the air, apply vignette (to prevent throbbing on top of jump)
|
||||
qboolean isInAir = ps->groundEntityNum == ENTITYNUM_NONE;
|
||||
int vr_turn_mode = trap_Cvar_VariableIntegerValue("vr_turn_mode"); // defined in VrCvars.h
|
||||
// Apply only for smooth turn
|
||||
qboolean isTurning = (vr_turn_mode == 2);
|
||||
if (isTurning) {
|
||||
float yawDelta = fabsf(cgVR->clientview_yaw_delta);
|
||||
if (yawDelta > 180)
|
||||
{
|
||||
yawDelta = fabs(yawDelta - 360);
|
||||
}
|
||||
filteredViewYawDelta = filteredViewYawDelta * 0.75f + yawDelta * 0.25f;
|
||||
isTurning = filteredViewYawDelta > 1;
|
||||
}
|
||||
|
||||
if (isMoving || isInAir || isTurning)
|
||||
{
|
||||
if (currentComfortVignetteValue < vr_comfort_vignette)
|
||||
{
|
||||
currentComfortVignetteValue += vr_comfort_vignette * 0.05;
|
||||
if (currentComfortVignetteValue > 1.0f)
|
||||
currentComfortVignetteValue = 1.0f;
|
||||
}
|
||||
} else{
|
||||
if (currentComfortVignetteValue > 0.0f)
|
||||
currentComfortVignetteValue -= vr_comfort_vignette * 0.05;
|
||||
}
|
||||
|
||||
if (currentComfortVignetteValue > 0.0f && currentComfortVignetteValue <= 1.0f)
|
||||
{
|
||||
int screenWidth = cg.refdef.width;
|
||||
int screenHeight = cg.refdef.height;
|
||||
|
||||
int x = (int)(0 + currentComfortVignetteValue * screenWidth / 3.5f);
|
||||
int w = (int)(screenWidth - 2 * x);
|
||||
int y = (int)(0 + currentComfortVignetteValue * screenHeight / 3.5f);
|
||||
int h = (int)(screenHeight - 2 * y);
|
||||
|
||||
vec4_t black = {0.0, 0.0, 0.0, 1};
|
||||
trap_R_SetColor( black );
|
||||
|
||||
// sides
|
||||
trap_R_DrawStretchPic( 0, 0, x, screenHeight, 0, 0, 1, 1, cgs.media.whiteShader );
|
||||
trap_R_DrawStretchPic( screenWidth - x, 0, x, screenHeight, 0, 0, 1, 1, cgs.media.whiteShader );
|
||||
// top/bottom
|
||||
trap_R_DrawStretchPic( x, 0, screenWidth - x, y, 0, 0, 1, 1, cgs.media.whiteShader );
|
||||
trap_R_DrawStretchPic( x, screenHeight - y, screenWidth - x, y, 0, 0, 1, 1, cgs.media.whiteShader );
|
||||
// vignette
|
||||
trap_R_DrawStretchPic( x, y, w, h, 0, 0, 1, 1, cgs.media.vignetteShader );
|
||||
|
||||
trap_R_SetColor( NULL );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
|
@ -3430,6 +3505,8 @@ static void CG_Draw2D( void ) {
|
|||
// don't draw any status if dead
|
||||
if ( cg.snap->ps.stats[STAT_HEALTH] > 0 ) {
|
||||
|
||||
CG_DrawVignette();
|
||||
|
||||
if (cg.zoomedScope || cg.zoomedBinoc || ( cg.snap->ps.eFlags & EF_MG42_ACTIVE )) {
|
||||
CG_DrawCrosshair();
|
||||
}
|
||||
|
|
|
@ -1471,6 +1471,9 @@ typedef struct {
|
|||
qhandle_t selectCursor;
|
||||
qhandle_t sizeCursor;
|
||||
|
||||
// comfort vignette
|
||||
qhandle_t vignetteShader;
|
||||
|
||||
} cgMedia_t;
|
||||
|
||||
|
||||
|
|
|
@ -1566,6 +1566,9 @@ static void CG_RegisterGraphics( void ) {
|
|||
// cgs.media.cursor = trap_R_RegisterShaderNoMip( "menu/art/3_cursor2" );
|
||||
cgs.media.sizeCursor = trap_R_RegisterShaderNoMip( "ui/assets/sizecursor.tga" );
|
||||
cgs.media.selectCursor = trap_R_RegisterShaderNoMip( "ui/assets/selectcursor.tga" );
|
||||
|
||||
cgs.media.vignetteShader = trap_R_RegisterShaderNoMip( "gfx/vignette" );
|
||||
|
||||
CG_LoadingString( " - game media done" );
|
||||
|
||||
}
|
||||
|
|
|
@ -29,6 +29,9 @@ If you have questions concerning this license or the applicable additional terms
|
|||
// cl.input.c -- builds an intended movement command to send to the server
|
||||
|
||||
#include "client.h"
|
||||
#include "../../../RTCWVR/VrClientInfo.h"
|
||||
|
||||
extern vr_client_info_t vr;
|
||||
|
||||
unsigned frame_msec;
|
||||
int old_com_frameTime;
|
||||
|
@ -445,6 +448,8 @@ void CL_AdjustAngles( void ) {
|
|||
cl.viewangles[PITCH] = new_move.pitch;
|
||||
|
||||
cl.viewangles[ROLL] = new_move.roll;
|
||||
|
||||
VectorCopy(cl.viewangles, vr.clientviewangles);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
BIN
Projects/Android/z_vr_assets/gfx/vignette.tga
Normal file
BIN
Projects/Android/z_vr_assets/gfx/vignette.tga
Normal file
Binary file not shown.
|
@ -327,7 +327,23 @@ itemDef
|
|||
forecolor 1 1 1 1
|
||||
visible 1
|
||||
}
|
||||
|
||||
|
||||
itemDef {
|
||||
name vr
|
||||
group grpControls
|
||||
type ITEM_TYPE_SLIDER
|
||||
text "Comfort Vignette:"
|
||||
cvarfloat "vr_comfort_vignette" 0 0 1
|
||||
rect 82 210 290 12
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 142
|
||||
textaligny 10
|
||||
textscale .23
|
||||
style WINDOW_STYLE_FILLED
|
||||
backcolor 1 1 1 .07
|
||||
forecolor 1 1 1 1
|
||||
visible 1
|
||||
}
|
||||
|
||||
// TOOLS MESSAGE //
|
||||
|
||||
|
|
|
@ -300,7 +300,23 @@ itemDef
|
|||
forecolor 1 1 1 1
|
||||
visible 1
|
||||
}
|
||||
|
||||
|
||||
itemDef {
|
||||
name ingame_vr
|
||||
group grpControls
|
||||
type ITEM_TYPE_SLIDER
|
||||
text "Comfort Vignette:"
|
||||
cvarfloat "vr_comfort_vignette" 0 0 1
|
||||
rect 82 210 290 12
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 142
|
||||
textaligny 10
|
||||
textscale .23
|
||||
style WINDOW_STYLE_FILLED
|
||||
backcolor 1 1 1 .07
|
||||
forecolor 1 1 1 1
|
||||
visible 1
|
||||
}
|
||||
|
||||
|
||||
itemDef {
|
||||
|
|
Loading…
Reference in a new issue