@@ -477,55 +477,58 @@ internal T Update(float deltaTime, double tickLatencyAsTime, double minDeltaTime
477477 /// <param name="renderTime"></param>
478478 private void TryConsumeFromBuffer ( double renderTime , double serverTime )
479479 {
480- BufferedItem ? previousItem = null ;
481- var alreadyHasBufferItem = false ;
482- while ( m_BufferQueue . TryPeek ( out BufferedItem potentialItem ) )
480+ if ( ! InterpolateState . Target . HasValue || ( InterpolateState . Target . Value . TimeSent <= renderTime ) )
483481 {
484- // If we are still on the same buffered item (FIFO Queue), then exit early as there is nothing
485- // to consume.
486- if ( previousItem . HasValue && previousItem . Value . TimeSent == potentialItem . TimeSent )
482+ BufferedItem ? previousItem = null ;
483+ var alreadyHasBufferItem = false ;
484+ while ( m_BufferQueue . TryPeek ( out BufferedItem potentialItem ) )
487485 {
488- break ;
489- }
486+ // If we are still on the same buffered item (FIFO Queue), then exit early as there is nothing
487+ // to consume.
488+ if ( previousItem . HasValue && previousItem . Value . TimeSent == potentialItem . TimeSent )
489+ {
490+ break ;
491+ }
490492
491- if ( ( potentialItem . TimeSent <= serverTime ) &&
492- ( ! InterpolateState . Target . HasValue || InterpolateState . Target . Value . TimeSent < potentialItem . TimeSent ) )
493- {
494- if ( m_BufferQueue . TryDequeue ( out BufferedItem target ) )
493+ if ( ( potentialItem . TimeSent <= serverTime ) &&
494+ ( ! InterpolateState . Target . HasValue || InterpolateState . Target . Value . TimeSent < potentialItem . TimeSent ) )
495495 {
496- if ( ! InterpolateState . Target . HasValue )
497- {
498- InterpolateState . Target = target ;
499- alreadyHasBufferItem = true ;
500- InterpolateState . PreviousValue = InterpolateState . CurrentValue ;
501- InterpolateState . StartTime = target . TimeSent ;
502- InterpolateState . EndTime = target . TimeSent ;
503- }
504- else
496+ if ( m_BufferQueue . TryDequeue ( out BufferedItem target ) )
505497 {
506- if ( ! alreadyHasBufferItem )
498+ if ( ! InterpolateState . Target . HasValue )
507499 {
500+ InterpolateState . Target = target ;
508501 alreadyHasBufferItem = true ;
509- InterpolateState . StartTime = InterpolateState . Target . Value . TimeSent ;
510502 InterpolateState . PreviousValue = InterpolateState . CurrentValue ;
511- InterpolateState . TargetReached = false ;
503+ InterpolateState . StartTime = target . TimeSent ;
504+ InterpolateState . EndTime = target . TimeSent ;
505+ }
506+ else
507+ {
508+ if ( ! alreadyHasBufferItem )
509+ {
510+ alreadyHasBufferItem = true ;
511+ InterpolateState . StartTime = InterpolateState . Target . Value . TimeSent ;
512+ InterpolateState . PreviousValue = InterpolateState . CurrentValue ;
513+ InterpolateState . TargetReached = false ;
514+ }
515+ InterpolateState . EndTime = target . TimeSent ;
516+ InterpolateState . Target = target ;
517+ InterpolateState . TimeToTargetValue = InterpolateState . EndTime - InterpolateState . StartTime ;
512518 }
513- InterpolateState . EndTime = target . TimeSent ;
514- InterpolateState . Target = target ;
515- InterpolateState . TimeToTargetValue = InterpolateState . EndTime - InterpolateState . StartTime ;
516519 }
517520 }
518- }
519- else
520- {
521- break ;
522- }
521+ else
522+ {
523+ break ;
524+ }
523525
524- if ( ! InterpolateState . Target . HasValue )
525- {
526- break ;
526+ if ( ! InterpolateState . Target . HasValue )
527+ {
528+ break ;
529+ }
530+ previousItem = potentialItem ;
527531 }
528- previousItem = potentialItem ;
529532 }
530533 }
531534
0 commit comments