summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIronClawTrem <louie.nutman@gmail.com>2020-03-19 15:30:11 +0000
committerIronClawTrem <louie.nutman@gmail.com>2020-03-19 15:30:11 +0000
commit89b2db06fc43b8dbd5c737996055aad7d51bf27e (patch)
treeb0027297dada64700a4c092551d8c1d568dd06d9
parent618e63e53960814dc42ad9a09c326904a2226cad (diff)
fix unlagged not being used at all for overly large latencies
-rw-r--r--src/game/g_active.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/game/g_active.c b/src/game/g_active.c
index 3ef4d0b..ddc0669 100644
--- a/src/game/g_active.c
+++ b/src/game/g_active.c
@@ -1199,10 +1199,10 @@ void G_UnlaggedCalc( int time, gentity_t *rewindEnt )
{
int i = 0;
gentity_t *ent;
- int startIndex = level.unlaggedIndex;
- int stopIndex = -1;
- int frameMsec = 0;
- float lerp = 0.5f;
+ int startIndex;
+ int stopIndex;
+ int frameMsec;
+ float lerp;
if( !g_unlagged.integer )
return;
@@ -1214,13 +1214,18 @@ void G_UnlaggedCalc( int time, gentity_t *rewindEnt )
ent->client->unlaggedCalc.used = qfalse;
}
- for( i = 0; i < MAX_UNLAGGED_MARKERS; i++ )
+ // client is on the current frame, no need for unlagged
+ if( level.unlaggedTimes[ level.unlaggedIndex ] <= time )
+ return;
+
+ startIndex = level.unlaggedIndex;
+ for( i = 1; i < MAX_UNLAGGED_MARKERS; i++ )
{
- if( level.unlaggedTimes[ startIndex ] <= time )
- break;
stopIndex = startIndex;
if( --startIndex < 0 )
startIndex = MAX_UNLAGGED_MARKERS - 1;
+ if( level.unlaggedTimes[ startIndex ] <= time )
+ break;
}
if( i == MAX_UNLAGGED_MARKERS )
{
@@ -1228,18 +1233,11 @@ void G_UnlaggedCalc( int time, gentity_t *rewindEnt )
// just use the oldest marker with no lerping
lerp = 0.0f;
}
-
- // client is on the current frame, no need for unlagged
- if( stopIndex == -1 )
- return;
-
- // lerp between two markers
- frameMsec = level.unlaggedTimes[ stopIndex ] -
- level.unlaggedTimes[ startIndex ];
- if( frameMsec > 0 )
+ else
{
- lerp = ( float )( time - level.unlaggedTimes[ startIndex ] )
- / ( float )frameMsec;
+ // lerp between two markers
+ frameMsec = level.unlaggedTimes[ stopIndex ] - level.unlaggedTimes[ startIndex ];
+ lerp = ( float )( time - level.unlaggedTimes[ startIndex ] ) / ( float )frameMsec;
}
for( i = 0; i < level.maxclients; i++ )