mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-22 19:38:06 -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_timer.h"
|
||||||
#include "i_video.h"
|
#include "i_video.h"
|
||||||
#include "p_mobj.h"
|
#include "p_mobj.h"
|
||||||
|
#include "r_main.h"
|
||||||
#include "r_state.h"
|
#include "r_state.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Local View
|
// 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_UpdateLocalView)(void);
|
||||||
|
|
||||||
void G_ClearLocalView(void)
|
void G_ClearLocalView(void)
|
||||||
@ -44,6 +69,8 @@ static void UpdateLocalView_FakeLongTics(void)
|
|||||||
localview.angleoffset = 0;
|
localview.angleoffset = 0;
|
||||||
localview.pitch = 0;
|
localview.pitch = 0;
|
||||||
localview.rawpitch = 0.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;
|
CarryAngleTic = lowres_turn ? CarryAngleTic_LowRes : CarryAngleTic_Full;
|
||||||
CarryAngle = CarryAngleTic;
|
CarryAngle = CarryAngleTic;
|
||||||
G_UpdateLocalView = G_ClearLocalView;
|
G_UpdateLocalView = G_ClearLocalView;
|
||||||
|
G_CalcViewAngle = CalcViewAngle_RawInput;
|
||||||
|
|
||||||
if (raw_input && (!netgame || solonet))
|
if (!netgame || solonet)
|
||||||
{
|
{
|
||||||
if (lowres_turn && fake_longtics)
|
if (lowres_turn && fake_longtics)
|
||||||
{
|
{
|
||||||
CarryAngle = CarryAngle_FakeLongTics;
|
CarryAngle = CarryAngle_FakeLongTics;
|
||||||
G_UpdateLocalView = UpdateLocalView_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;
|
CarryAngle = lowres_turn ? CarryAngle_LowRes : CarryAngle_Full;
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,8 @@ struct ticcmd_s;
|
|||||||
|
|
||||||
// Local View
|
// 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);
|
extern void (*G_UpdateLocalView)(void);
|
||||||
void G_ClearLocalView(void);
|
void G_ClearLocalView(void);
|
||||||
|
|
||||||
|
26
src/r_main.c
26
src/r_main.c
@ -30,6 +30,7 @@
|
|||||||
#include "doomdata.h"
|
#include "doomdata.h"
|
||||||
#include "doomdef.h"
|
#include "doomdef.h"
|
||||||
#include "doomstat.h"
|
#include "doomstat.h"
|
||||||
|
#include "g_input.h"
|
||||||
#include "i_video.h"
|
#include "i_video.h"
|
||||||
#include "p_mobj.h"
|
#include "p_mobj.h"
|
||||||
#include "p_pspr.h"
|
#include "p_pspr.h"
|
||||||
@ -696,24 +697,6 @@ subsector_t *R_PointInSubsector(fixed_t x, fixed_t y)
|
|||||||
return &subsectors[nodenum & ~NF_SUBSECTOR];
|
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
|
// R_SetupFrame
|
||||||
//
|
//
|
||||||
@ -722,7 +705,7 @@ void R_SetupFrame (player_t *player)
|
|||||||
{
|
{
|
||||||
int i, cm;
|
int i, cm;
|
||||||
fixed_t pitch;
|
fixed_t pitch;
|
||||||
const boolean use_localview = CheckLocalView(player);
|
const boolean use_localview = G_UseLocalView(player);
|
||||||
|
|
||||||
viewplayer = player;
|
viewplayer = player;
|
||||||
// [AM] Interpolate the player camera if the feature is enabled.
|
// [AM] Interpolate the player camera if the feature is enabled.
|
||||||
@ -743,8 +726,7 @@ void R_SetupFrame (player_t *player)
|
|||||||
|
|
||||||
if (use_localview)
|
if (use_localview)
|
||||||
{
|
{
|
||||||
viewangle = (player->mo->angle + localview.angle - player->ticangle +
|
viewangle = G_CalcViewAngle(player);
|
||||||
LerpAngle(player->oldticangle, player->ticangle));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -773,7 +755,7 @@ void R_SetupFrame (player_t *player)
|
|||||||
// [crispy] pitch is actual lookdir and weapon pitch
|
// [crispy] pitch is actual lookdir and weapon pitch
|
||||||
pitch = player->pitch + player->recoilpitch;
|
pitch = player->pitch + player->recoilpitch;
|
||||||
|
|
||||||
if (use_localview && lowres_turn && fake_longtics)
|
if (use_localview)
|
||||||
{
|
{
|
||||||
viewangle += localview.angle;
|
viewangle += localview.angle;
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,8 @@ typedef struct localview_s
|
|||||||
double rawangle;
|
double rawangle;
|
||||||
double rawpitch;
|
double rawpitch;
|
||||||
angle_t angle;
|
angle_t angle;
|
||||||
|
angle_t oldlerpangle;
|
||||||
|
angle_t lerpangle;
|
||||||
fixed_t pitch;
|
fixed_t pitch;
|
||||||
short angleoffset;
|
short angleoffset;
|
||||||
} localview_t;
|
} localview_t;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user