mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Haven't fixed netgames yet but pushing what I have at least
This commit is contained in:
parent
ebd4197f5c
commit
8933fe12f6
1 changed files with 54 additions and 41 deletions
87
src/d_main.c
87
src/d_main.c
|
|
@ -713,6 +713,7 @@ void D_SRB2Loop(void)
|
||||||
tic_t oldentertics = 0, entertic = 0, realtics = 0, rendertimeout = INFTICS;
|
tic_t oldentertics = 0, entertic = 0, realtics = 0, rendertimeout = INFTICS;
|
||||||
boolean ticked;
|
boolean ticked;
|
||||||
boolean interp;
|
boolean interp;
|
||||||
|
boolean doDisplay = false;
|
||||||
|
|
||||||
if (dedicated)
|
if (dedicated)
|
||||||
server = true;
|
server = true;
|
||||||
|
|
@ -784,7 +785,9 @@ void D_SRB2Loop(void)
|
||||||
debugload--;
|
debugload--;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
doDisplay = false;
|
||||||
interp = R_UsingFrameInterpolation();
|
interp = R_UsingFrameInterpolation();
|
||||||
|
|
||||||
if (!realtics && !singletics && !interp)
|
if (!realtics && !singletics && !interp)
|
||||||
{
|
{
|
||||||
// Non-interp sleep
|
// Non-interp sleep
|
||||||
|
|
@ -804,24 +807,61 @@ void D_SRB2Loop(void)
|
||||||
// process tics (but maybe not if realtic == 0)
|
// process tics (but maybe not if realtic == 0)
|
||||||
ticked = TryRunTics(realtics);
|
ticked = TryRunTics(realtics);
|
||||||
|
|
||||||
if (interp)
|
if (lastdraw || singletics || gametic > rendergametic)
|
||||||
{
|
{
|
||||||
if (!(paused || P_AutoPause()))
|
rendergametic = gametic;
|
||||||
|
rendertimeout = entertic+TICRATE/17;
|
||||||
|
|
||||||
|
doDisplay = true;
|
||||||
|
}
|
||||||
|
else if (rendertimeout < entertic) // in case the server hang or netsplit
|
||||||
|
{
|
||||||
|
doDisplay = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (interp)
|
||||||
{
|
{
|
||||||
static float tictime = 0.0f;
|
static float tictime = 0.0f;
|
||||||
static float prevtime = 0.0f;
|
static float prevtime = 0.0f;
|
||||||
float entertime = I_GetTimeFrac();
|
float entertime = I_GetTimeFrac();
|
||||||
fixed_t entertimefrac;
|
|
||||||
|
fixed_t entertimefrac = FRACUNIT;
|
||||||
|
|
||||||
if (ticked)
|
if (ticked)
|
||||||
|
{
|
||||||
tictime = entertime;
|
tictime = entertime;
|
||||||
|
}
|
||||||
|
|
||||||
if (entertime - prevtime >= 1.0f) // Lagged for more frames than a gametic... shut off interpolation.
|
// Handle interp sleep / framerate cap here.
|
||||||
|
// TryRunTics needs ran if possible to prevent lagged map changes,
|
||||||
|
// (and if that runs, the code above needs to also run)
|
||||||
|
// so this is done here after TryRunTics.
|
||||||
|
if (D_CheckFrameCap())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(paused || P_AutoPause()))
|
||||||
|
{
|
||||||
|
#if 1
|
||||||
|
CONS_Printf("prevtime = %f\n", prevtime);
|
||||||
|
CONS_Printf("entertime = %f\n", entertime);
|
||||||
|
CONS_Printf("tictime = %f\n", tictime);
|
||||||
|
CONS_Printf("entertime - prevtime = %f\n", entertime - prevtime);
|
||||||
|
CONS_Printf("entertime - tictime = %f\n", entertime - tictime);
|
||||||
|
CONS_Printf("========\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (entertime - prevtime >= 1.0f)
|
||||||
|
{
|
||||||
|
// Lagged for more frames than a gametic...
|
||||||
|
// No need for interpolation.
|
||||||
entertimefrac = FRACUNIT;
|
entertimefrac = FRACUNIT;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
entertimefrac = min(FRACUNIT, FLOAT_TO_FIXED(entertime - tictime));
|
entertimefrac = min(FRACUNIT, FLOAT_TO_FIXED(entertime - tictime));
|
||||||
|
}
|
||||||
prevtime = entertime;
|
|
||||||
|
|
||||||
// renderdeltatics is a bit awkard to evaluate, since the system time interface is whole tic-based
|
// renderdeltatics is a bit awkard to evaluate, since the system time interface is whole tic-based
|
||||||
renderdeltatics = realtics * FRACUNIT;
|
renderdeltatics = realtics * FRACUNIT;
|
||||||
|
|
@ -833,48 +873,21 @@ void D_SRB2Loop(void)
|
||||||
rendertimefrac = entertimefrac;
|
rendertimefrac = entertimefrac;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle interp sleep / framerate cap here.
|
prevtime = entertime;
|
||||||
// TryRunTics needs ran if possible to prevent lagged map changes,
|
|
||||||
// (and if that runs, the code above needs to also run)
|
|
||||||
// so this is done here after TryRunTics.
|
|
||||||
if (D_CheckFrameCap())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rendertimefrac = FRACUNIT;
|
|
||||||
renderdeltatics = realtics * FRACUNIT;
|
renderdeltatics = realtics * FRACUNIT;
|
||||||
|
rendertimefrac = FRACUNIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (interp)
|
if (interp || doDisplay)
|
||||||
{
|
{
|
||||||
D_Display();
|
D_Display();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastdraw || singletics || gametic > rendergametic)
|
if (doDisplay)
|
||||||
{
|
{
|
||||||
rendergametic = gametic;
|
|
||||||
rendertimeout = entertic+TICRATE/17;
|
|
||||||
|
|
||||||
if (!interp)
|
|
||||||
{
|
|
||||||
D_Display();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (moviemode)
|
|
||||||
M_SaveFrame();
|
|
||||||
if (takescreenshot) // Only take screenshots after drawing.
|
|
||||||
M_DoScreenShot();
|
|
||||||
}
|
|
||||||
else if (rendertimeout < entertic) // in case the server hang or netsplit
|
|
||||||
{
|
|
||||||
if (!interp)
|
|
||||||
{
|
|
||||||
D_Display();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (moviemode)
|
if (moviemode)
|
||||||
M_SaveFrame();
|
M_SaveFrame();
|
||||||
if (takescreenshot) // Only take screenshots after drawing.
|
if (takescreenshot) // Only take screenshots after drawing.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue