mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Let viewrollangle be independent of camera tilting
This commit is contained in:
parent
f313eece7e
commit
bdc4b50de2
5 changed files with 45 additions and 46 deletions
|
|
@ -499,6 +499,8 @@ typedef struct player_s
|
|||
fixed_t bob;
|
||||
|
||||
angle_t viewrollangle;
|
||||
// camera tilt
|
||||
// TODO: expose to lua
|
||||
angle_t tilt;
|
||||
|
||||
angle_t angleturn;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ static void HWR_ProjectSprite(mobj_t *thing);
|
|||
#ifdef HWPRECIP
|
||||
static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing);
|
||||
#endif
|
||||
static void HWR_RollTransform(FTransform *tr, angle_t roll);
|
||||
|
||||
void HWR_AddTransparentFloor(levelflat_t *levelflat, extrasubsector_t *xsub, boolean isceiling, fixed_t fixedheight, INT32 lightlevel, INT32 alpha, sector_t *FOFSector, FBITFIELD blend, boolean fogplane, extracolormap_t *planecolormap);
|
||||
void HWR_AddTransparentPolyobjectFloor(levelflat_t *levelflat, polyobj_t *polysector, boolean isceiling, fixed_t fixedheight,
|
||||
|
|
@ -5743,14 +5744,8 @@ static void HWR_DrawSkyBackground(player_t *player)
|
|||
dometransform.scalez = 1;
|
||||
dometransform.fovxangle = fpov; // Tails
|
||||
dometransform.fovyangle = fpov; // Tails
|
||||
if (player->viewrollangle != 0)
|
||||
{
|
||||
fixed_t rol = AngleFixed(player->viewrollangle);
|
||||
dometransform.rollangle = FIXED_TO_FLOAT(rol);
|
||||
dometransform.roll = true;
|
||||
dometransform.rollx = 1.0f;
|
||||
dometransform.rollz = 0.0f;
|
||||
}
|
||||
HWR_RollTransform(&dometransform,
|
||||
R_ViewRollAngle(player));
|
||||
dometransform.splitscreen = r_splitscreen;
|
||||
|
||||
HWR_GetTexture(texturetranslation[skytexture]);
|
||||
|
|
@ -6042,14 +6037,7 @@ void HWR_RenderSkyboxView(player_t *player)
|
|||
|
||||
atransform.fovxangle = fpov; // Tails
|
||||
atransform.fovyangle = fpov; // Tails
|
||||
if (player->viewrollangle != 0)
|
||||
{
|
||||
fixed_t rol = AngleFixed(player->viewrollangle);
|
||||
atransform.rollangle = FIXED_TO_FLOAT(rol);
|
||||
atransform.roll = true;
|
||||
atransform.rollx = 1.0f;
|
||||
atransform.rollz = 0.0f;
|
||||
}
|
||||
HWR_RollTransform(&atransform, R_ViewRollAngle(player));
|
||||
atransform.splitscreen = r_splitscreen;
|
||||
|
||||
gl_fovlud = (float)(1.0l/tan((double)(fpov*M_PIl/360l)));
|
||||
|
|
@ -6160,6 +6148,18 @@ void HWR_RenderSkyboxView(player_t *player)
|
|||
// ==========================================================================
|
||||
//
|
||||
// ==========================================================================
|
||||
|
||||
static void HWR_RollTransform(FTransform *tr, angle_t roll)
|
||||
{
|
||||
if (roll != 0)
|
||||
{
|
||||
tr->rollangle = roll / (float)ANG1;
|
||||
tr->roll = true;
|
||||
tr->rollx = 1.0f;
|
||||
tr->rollz = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void HWR_RenderPlayerView(void)
|
||||
{
|
||||
player_t * player = &players[displayplayers[viewssnum]];
|
||||
|
|
@ -6249,14 +6249,7 @@ void HWR_RenderPlayerView(void)
|
|||
|
||||
atransform.fovxangle = fpov; // Tails
|
||||
atransform.fovyangle = fpov; // Tails
|
||||
if (player->viewrollangle != 0)
|
||||
{
|
||||
fixed_t rol = AngleFixed(player->viewrollangle);
|
||||
atransform.rollangle = FIXED_TO_FLOAT(rol);
|
||||
atransform.roll = true;
|
||||
atransform.rollx = 1.0f;
|
||||
atransform.rollz = 0.0f;
|
||||
}
|
||||
HWR_RollTransform(&atransform, R_ViewRollAngle(player));
|
||||
atransform.splitscreen = r_splitscreen;
|
||||
|
||||
gl_fovlud = (float)(1.0l/tan((double)(fpov*M_PIl/360l)));
|
||||
|
|
|
|||
21
src/p_user.c
21
src/p_user.c
|
|
@ -4289,10 +4289,6 @@ Quaketilt (player_t *player)
|
|||
return moma;
|
||||
}
|
||||
|
||||
static inline int intsign(int n) {
|
||||
return n < 0 ? -1 : n > 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
static void
|
||||
DoABarrelRoll (player_t *player)
|
||||
{
|
||||
|
|
@ -4323,23 +4319,6 @@ DoABarrelRoll (player_t *player)
|
|||
player->tilt += delta;
|
||||
else
|
||||
player->tilt = slope;
|
||||
|
||||
if (cv_tilting.value)
|
||||
{
|
||||
player->viewrollangle = player->tilt;
|
||||
|
||||
if (cv_actionmovie.value)
|
||||
{
|
||||
int xs = intsign(quake.x),
|
||||
ys = intsign(quake.y),
|
||||
zs = intsign(quake.z);
|
||||
player->viewrollangle += (xs ^ ys ^ zs) * ANG1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
player->viewrollangle = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
26
src/r_main.c
26
src/r_main.c
|
|
@ -629,7 +629,7 @@ void R_CheckViewMorph(int s)
|
|||
float fisheyemap[MAXVIDWIDTH/2 + 1];
|
||||
#endif
|
||||
|
||||
angle_t rollangle = players[displayplayers[s]].viewrollangle;
|
||||
angle_t rollangle = R_ViewRollAngle(&players[displayplayers[s]]);
|
||||
#ifdef WOUGHMP_WOUGHMP
|
||||
fixed_t fisheye = cv_cam2_turnmultiplier.value; // temporary test value
|
||||
#endif
|
||||
|
|
@ -936,6 +936,30 @@ void R_ApplyViewMorph(int s)
|
|||
width*vid.bpp, height, width*vid.bpp, vid.width);
|
||||
}
|
||||
|
||||
static inline int intsign(int n) {
|
||||
return n < 0 ? -1 : n > 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
angle_t R_ViewRollAngle(const player_t *player)
|
||||
{
|
||||
angle_t roll = player->viewrollangle;
|
||||
|
||||
if (cv_tilting.value)
|
||||
{
|
||||
roll += player->tilt;
|
||||
|
||||
if (cv_actionmovie.value)
|
||||
{
|
||||
int xs = intsign(quake.x),
|
||||
ys = intsign(quake.y),
|
||||
zs = intsign(quake.z);
|
||||
roll += (xs ^ ys ^ zs) * ANG1;
|
||||
}
|
||||
}
|
||||
|
||||
return roll;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// R_SetViewSize
|
||||
|
|
|
|||
|
|
@ -115,6 +115,7 @@ void R_Init(void);
|
|||
|
||||
void R_CheckViewMorph(int split);
|
||||
void R_ApplyViewMorph(int split);
|
||||
angle_t R_ViewRollAngle(const player_t *player);
|
||||
|
||||
// just sets setsizeneeded true
|
||||
extern boolean setsizeneeded;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue