separate viewmodel fov

This commit is contained in:
Ian 2022-07-10 17:55:41 -04:00
parent bf4df2b74f
commit c96974d03d
7 changed files with 35 additions and 36 deletions

BIN
.DS_Store vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -112,6 +112,7 @@ typedef struct {
//johnfitz
extern cvar_t gl_ztrick;
extern cvar_t scr_fov_viewmodel;
/*
=================
@ -697,8 +698,17 @@ void R_DrawAliasModel (entity_t *e)
// double size of eyes, since they are really hard to see in gl
glScalef (paliashdr->scale[0]*2, paliashdr->scale[1]*2, paliashdr->scale[2]*2);
} else {
glTranslatef (paliashdr->scale_origin[0], paliashdr->scale_origin[1], paliashdr->scale_origin[2]);
glScalef (paliashdr->scale[0], paliashdr->scale[1], paliashdr->scale[2]);
// Special handling of view model to keep FOV from altering look. Pretty good. Not perfect but rather close.
if (e == &cl.viewent && scr_fov_viewmodel.value) {
float scale = 1.0f / tan (DEG2RAD (scr_fov.value / 2.0f)) * scr_fov_viewmodel.value / 90.0f;
glTranslatef (paliashdr->scale_origin[0] * scale, paliashdr->scale_origin[1], paliashdr->scale_origin[2]);
glScalef (paliashdr->scale[0] * scale, paliashdr->scale[1], paliashdr->scale[2]);
} else {
glTranslatef (paliashdr->scale_origin[0], paliashdr->scale_origin[1], paliashdr->scale_origin[2]);
glScalef (paliashdr->scale[0], paliashdr->scale[1], paliashdr->scale[2]);
}
}
anim = (int)(cl.time*10) & 3;

View file

@ -82,7 +82,8 @@ float scr_conlines; // lines of console to display
float oldscreensize, oldfov;
cvar_t scr_viewsize = {"viewsize","100", true};
cvar_t scr_fov = {"fov","80"}; // 10 - 170
cvar_t scr_fov = {"fov","90"}; // 10 - 170
cvar_t scr_fov_viewmodel = {"r_viewmodel_fov","70"};
cvar_t scr_conspeed = {"scr_conspeed","300"};
cvar_t scr_centertime = {"scr_centertime","2"};
cvar_t scr_showram = {"showram","1"};
@ -576,6 +577,7 @@ static void SCR_CalcRefdef (void)
if (scr_viewsize.value > 120)
Cvar_Set ("viewsize","120");
// bound field of view
if (scr_fov.value < 10)
Cvar_Set ("fov","10");
@ -673,6 +675,7 @@ void SCR_Init (void)
{
Cvar_RegisterVariable (&scr_fov);
Cvar_RegisterVariable (&scr_fov_viewmodel);
Cvar_RegisterVariable (&scr_viewsize);
Cvar_RegisterVariable (&scr_conspeed);
Cvar_RegisterVariable (&scr_showram);
@ -1387,6 +1390,7 @@ int GetWeaponZoomAmmount (void)
}
float zoomin_time;
int original_fov;
int original_view_fov;
void SCR_UpdateScreen (void)
{
static float oldscr_viewsize;
@ -1421,65 +1425,50 @@ void SCR_UpdateScreen (void)
//
if (cl.stats[STAT_ZOOM] == 1)
{
/*if (zoomin_time == 0 && !original_fov)
{
original_fov = scr_fov.value;
zoomin_time = Sys_FloatTime () + 0.01;
Cvar_SetValue ("fov", scr_fov.value - 2.5);
}
else if (zoomin_time < Sys_FloatTime ())
{
int tempfloat = original_fov - GetWeaponZoomAmmount();
if (scr_fov.value > tempfloat)
{
zoomin_time = Sys_FloatTime () + 0.01;
Cvar_SetValue ("fov", scr_fov.value - 2.5);
}
else
{
Cvar_SetValue ("fov", tempfloat);
zoomin_time = 0;
}
}*/
if(!original_fov)
if(!original_fov) {
original_fov = scr_fov.value;
original_view_fov = scr_fov_viewmodel.value;
}
if(scr_fov.value > (GetWeaponZoomAmmount() + 1))//+1 for accounting for floating point inaccurraces
{
scr_fov.value += ((original_fov - GetWeaponZoomAmmount()) - scr_fov.value) * 0.25;
scr_fov_viewmodel.value += ((original_view_fov - GetWeaponZoomAmmount()) - scr_fov_viewmodel.value) * 0.25;
Cvar_SetValue("fov",scr_fov.value);
Cvar_SetValue("r_viewmodel_fov", scr_fov_viewmodel.value);
}
}
else if (cl.stats[STAT_ZOOM] == 2)
{
Cvar_SetValue ("fov", 30);
Cvar_SetValue ("r_viewmodel_fov", 30);
zoomin_time = 0;
}
else if (cl.stats[STAT_ZOOM] == 3)
{
if(!original_fov)
if(!original_fov) {
original_fov = scr_fov.value;
//original_fov = scr_fov.value;
original_view_fov = scr_fov_viewmodel.value;
}
scr_fov.value += (original_fov - 10 - scr_fov.value) * 0.3;
scr_fov_viewmodel.value += (original_view_fov - 10 - scr_fov_viewmodel.value) * 0.3;
Cvar_SetValue("fov",scr_fov.value);
Cvar_SetValue("r_viewmodel_fov", scr_fov_viewmodel.value);
}
else if (cl.stats[STAT_ZOOM] == 0 && original_fov != 0)
{
/*zoomin_time = Sys_FloatTime () + 0.01;
Cvar_SetValue ("fov", scr_fov.value + 2.5);
if (scr_fov.value == original_fov)
{
zoomin_time = 0;
original_fov = 0;
}*/
if(scr_fov.value < (original_fov + 1))//+1 for accounting for floating point inaccuracies
{
scr_fov.value += (original_fov - scr_fov.value) * 0.25;
scr_fov_viewmodel.value += (original_view_fov - scr_fov_viewmodel.value) * 0.25;
Cvar_SetValue("fov",scr_fov.value);
Cvar_SetValue("r_viewmodel_fov", scr_fov_viewmodel.value);
}
else
{
original_fov = 0;
original_view_fov = 0;
}
}

View file

@ -29,8 +29,6 @@ int nanmask = 255<<23;
/*-----------------------------------------------------------------*/
#define DEG2RAD( a ) ( a * M_PI ) / 180.0F
void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal )
{
float d;

View file

@ -46,6 +46,8 @@ extern int nanmask;
#define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];}
#define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
#define DEG2RAD( a ) ( a * M_PI ) / 180.0F
void VectorMA (vec3_t veca, float scale, vec3_t vecb, vec3_t vecc);
vec_t _DotProduct (vec3_t v1, vec3_t v2);