mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-11 01:02:16 +00:00
Interpolate from time of previous tic
Previously interpolated from last 35th of a second, which
may be offset from game time due to connection lag.
Consider this the proper fix to 6ecac4159a too.
This commit is contained in:
parent
7516a04eba
commit
c812d6fdd7
5 changed files with 28 additions and 13 deletions
|
|
@ -5259,8 +5259,10 @@ static void SV_Maketic(void)
|
|||
maketic++;
|
||||
}
|
||||
|
||||
void TryRunTics(tic_t realtics)
|
||||
boolean TryRunTics(tic_t realtics)
|
||||
{
|
||||
boolean ticking;
|
||||
|
||||
// the machine has lagged but it is not so bad
|
||||
if (realtics > TICRATE/7) // FIXME: consistency failure!!
|
||||
{
|
||||
|
|
@ -5304,7 +5306,9 @@ void TryRunTics(tic_t realtics)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (neededtic > gametic)
|
||||
ticking = neededtic > gametic;
|
||||
|
||||
if (ticking)
|
||||
{
|
||||
if (realtics)
|
||||
hu_stopped = false;
|
||||
|
|
@ -5314,10 +5318,10 @@ void TryRunTics(tic_t realtics)
|
|||
{
|
||||
if (realtics)
|
||||
hu_stopped = true;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (neededtic > gametic)
|
||||
if (ticking)
|
||||
{
|
||||
if (advancedemo)
|
||||
{
|
||||
|
|
@ -5354,6 +5358,8 @@ void TryRunTics(tic_t realtics)
|
|||
if (realtics)
|
||||
hu_stopped = true;
|
||||
}
|
||||
|
||||
return ticking;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -488,7 +488,7 @@ boolean Playing(void);
|
|||
void D_QuitNetGame(void);
|
||||
|
||||
//? How many ticks to run?
|
||||
void TryRunTics(tic_t realtic);
|
||||
boolean TryRunTics(tic_t realtic);
|
||||
|
||||
// extra data for lmps
|
||||
// these functions scare me. they contain magic.
|
||||
|
|
|
|||
16
src/d_main.c
16
src/d_main.c
|
|
@ -687,6 +687,7 @@ tic_t rendergametic;
|
|||
void D_SRB2Loop(void)
|
||||
{
|
||||
tic_t oldentertics = 0, entertic = 0, realtics = 0, rendertimeout = INFTICS;
|
||||
boolean ticked;
|
||||
|
||||
if (dedicated)
|
||||
server = true;
|
||||
|
|
@ -774,11 +775,20 @@ void D_SRB2Loop(void)
|
|||
realtics = 1;
|
||||
|
||||
// process tics (but maybe not if realtic == 0)
|
||||
TryRunTics(realtics);
|
||||
ticked = TryRunTics(realtics);
|
||||
|
||||
if (cv_frameinterpolation.value == 1 && !(paused || P_AutoPause() || hu_stopped))
|
||||
if (cv_frameinterpolation.value == 1 && !(paused || P_AutoPause()))
|
||||
{
|
||||
fixed_t entertimefrac = I_GetTimeFrac();
|
||||
static float tictime;
|
||||
float entertime = I_GetTimeFrac();
|
||||
|
||||
fixed_t entertimefrac;
|
||||
|
||||
if (ticked)
|
||||
tictime = entertime;
|
||||
|
||||
entertimefrac = FLOAT_TO_FIXED(entertime - tictime);
|
||||
|
||||
// renderdeltatics is a bit awkard to evaluate, since the system time interface is whole tic-based
|
||||
renderdeltatics = realtics * FRACUNIT;
|
||||
if (entertimefrac > rendertimefrac)
|
||||
|
|
|
|||
|
|
@ -46,9 +46,9 @@ UINT32 I_GetFreeMem(UINT32 *total);
|
|||
*/
|
||||
tic_t I_GetTime(void);
|
||||
|
||||
/** \brief Get the current time as a fraction of a tic since the last tic.
|
||||
/** \brief Get the current time in tics including fractions.
|
||||
*/
|
||||
fixed_t I_GetTimeFrac(void);
|
||||
float I_GetTimeFrac(void);
|
||||
|
||||
/** \brief Returns precise time value for performance measurement.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1568,11 +1568,10 @@ tic_t I_GetTime(void)
|
|||
return (tic_t)f;
|
||||
}
|
||||
|
||||
fixed_t I_GetTimeFrac(void)
|
||||
float I_GetTimeFrac(void)
|
||||
{
|
||||
UpdateElapsedTics();
|
||||
|
||||
return FLOAT_TO_FIXED((float) (elapsed_tics - floor(elapsed_tics)));
|
||||
return elapsed_tics;
|
||||
}
|
||||
|
||||
precise_t I_GetPreciseTime(void)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue