diff options
author | IronClawTrem <louie.nutman@gmail.com> | 2020-03-19 15:30:11 +0000 |
---|---|---|
committer | IronClawTrem <louie.nutman@gmail.com> | 2020-03-19 15:30:11 +0000 |
commit | 89b2db06fc43b8dbd5c737996055aad7d51bf27e (patch) | |
tree | b0027297dada64700a4c092551d8c1d568dd06d9 | |
parent | 618e63e53960814dc42ad9a09c326904a2226cad (diff) |
fix unlagged not being used at all for overly large latencies
-rw-r--r-- | src/game/g_active.c | 34 |
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++ ) |