mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-22 11:22:18 -04:00
Separate fake_longtics
and raw_input
(#1710)
This commit is contained in:
parent
1c325fb79d
commit
2fb776726a
@ -24,12 +24,37 @@
|
||||
#include "i_timer.h"
|
||||
#include "i_video.h"
|
||||
#include "p_mobj.h"
|
||||
#include "r_main.h"
|
||||
#include "r_state.h"
|
||||
|
||||
//
|
||||
// Local View
|
||||
//
|
||||
|
||||
boolean G_UseLocalView(const player_t *player)
|
||||
{
|
||||
return ((raw_input || (lowres_turn && fake_longtics))
|
||||
&& player == &players[consoleplayer]
|
||||
&& player->playerstate != PST_DEAD
|
||||
&& !player->mo->reactiontime
|
||||
&& !demoplayback
|
||||
&& (!netgame || solonet));
|
||||
}
|
||||
|
||||
angle_t (*G_CalcViewAngle)(const player_t *player);
|
||||
|
||||
static angle_t CalcViewAngle_RawInput(const player_t *player)
|
||||
{
|
||||
return (player->mo->angle + localview.angle - player->ticangle
|
||||
+ LerpAngle(player->oldticangle, player->ticangle));
|
||||
}
|
||||
|
||||
static angle_t CalcViewAngle_LerpFakeLongTics(const player_t *player)
|
||||
{
|
||||
return LerpAngle(player->mo->oldangle + localview.oldlerpangle,
|
||||
player->mo->angle + localview.lerpangle);
|
||||
}
|
||||
|
||||
void (*G_UpdateLocalView)(void);
|
||||
|
||||
void G_ClearLocalView(void)
|
||||
@ -44,6 +69,8 @@ static void UpdateLocalView_FakeLongTics(void)
|
||||
localview.angleoffset = 0;
|
||||
localview.pitch = 0;
|
||||
localview.rawpitch = 0.0;
|
||||
localview.oldlerpangle = localview.lerpangle;
|
||||
localview.lerpangle = localview.angle;
|
||||
}
|
||||
|
||||
//
|
||||
@ -151,15 +178,21 @@ void G_UpdateAngleFunctions(void)
|
||||
CarryAngleTic = lowres_turn ? CarryAngleTic_LowRes : CarryAngleTic_Full;
|
||||
CarryAngle = CarryAngleTic;
|
||||
G_UpdateLocalView = G_ClearLocalView;
|
||||
G_CalcViewAngle = CalcViewAngle_RawInput;
|
||||
|
||||
if (raw_input && (!netgame || solonet))
|
||||
if (!netgame || solonet)
|
||||
{
|
||||
if (lowres_turn && fake_longtics)
|
||||
{
|
||||
CarryAngle = CarryAngle_FakeLongTics;
|
||||
G_UpdateLocalView = UpdateLocalView_FakeLongTics;
|
||||
|
||||
if (uncapped && !raw_input)
|
||||
{
|
||||
G_CalcViewAngle = CalcViewAngle_LerpFakeLongTics;
|
||||
}
|
||||
else if (uncapped)
|
||||
}
|
||||
else if (uncapped && raw_input)
|
||||
{
|
||||
CarryAngle = lowres_turn ? CarryAngle_LowRes : CarryAngle_Full;
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ struct ticcmd_s;
|
||||
|
||||
// Local View
|
||||
|
||||
boolean G_UseLocalView(const struct player_s *player);
|
||||
extern angle_t (*G_CalcViewAngle)(const struct player_s *player);
|
||||
extern void (*G_UpdateLocalView)(void);
|
||||
void G_ClearLocalView(void);
|
||||
|
||||
|
26
src/r_main.c
26
src/r_main.c
@ -30,6 +30,7 @@
|
||||
#include "doomdata.h"
|
||||
#include "doomdef.h"
|
||||
#include "doomstat.h"
|
||||
#include "g_input.h"
|
||||
#include "i_video.h"
|
||||
#include "p_mobj.h"
|
||||
#include "p_pspr.h"
|
||||
@ -696,24 +697,6 @@ subsector_t *R_PointInSubsector(fixed_t x, fixed_t y)
|
||||
return &subsectors[nodenum & ~NF_SUBSECTOR];
|
||||
}
|
||||
|
||||
static inline boolean CheckLocalView(const player_t *player)
|
||||
{
|
||||
return (
|
||||
// Don't use localview when interpolation is preferred.
|
||||
raw_input &&
|
||||
// Don't use localview if the player is spying.
|
||||
player == &players[consoleplayer] &&
|
||||
// Don't use localview if the player is dead.
|
||||
player->playerstate != PST_DEAD &&
|
||||
// Don't use localview if the player just teleported.
|
||||
!player->mo->reactiontime &&
|
||||
// Don't use localview if a demo is playing.
|
||||
!demoplayback &&
|
||||
// Don't use localview during a netgame (single-player or solo-net only).
|
||||
(!netgame || solonet)
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// R_SetupFrame
|
||||
//
|
||||
@ -722,7 +705,7 @@ void R_SetupFrame (player_t *player)
|
||||
{
|
||||
int i, cm;
|
||||
fixed_t pitch;
|
||||
const boolean use_localview = CheckLocalView(player);
|
||||
const boolean use_localview = G_UseLocalView(player);
|
||||
|
||||
viewplayer = player;
|
||||
// [AM] Interpolate the player camera if the feature is enabled.
|
||||
@ -743,8 +726,7 @@ void R_SetupFrame (player_t *player)
|
||||
|
||||
if (use_localview)
|
||||
{
|
||||
viewangle = (player->mo->angle + localview.angle - player->ticangle +
|
||||
LerpAngle(player->oldticangle, player->ticangle));
|
||||
viewangle = G_CalcViewAngle(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -773,7 +755,7 @@ void R_SetupFrame (player_t *player)
|
||||
// [crispy] pitch is actual lookdir and weapon pitch
|
||||
pitch = player->pitch + player->recoilpitch;
|
||||
|
||||
if (use_localview && lowres_turn && fake_longtics)
|
||||
if (use_localview)
|
||||
{
|
||||
viewangle += localview.angle;
|
||||
}
|
||||
|
@ -94,6 +94,8 @@ typedef struct localview_s
|
||||
double rawangle;
|
||||
double rawpitch;
|
||||
angle_t angle;
|
||||
angle_t oldlerpangle;
|
||||
angle_t lerpangle;
|
||||
fixed_t pitch;
|
||||
short angleoffset;
|
||||
} localview_t;
|
||||
|
Loading…
x
Reference in New Issue
Block a user