Browse Source

engine: client: try another workaround for backwards animtime

pull/2/head
Alibek Omarov 1 year ago
parent
commit
f031c31b77
  1. 23
      engine/client/cl_frame.c

23
engine/client/cl_frame.c

@ -54,17 +54,28 @@ Store another position into interpolation circular buffer
*/ */
void CL_UpdatePositions( cl_entity_t *ent ) void CL_UpdatePositions( cl_entity_t *ent )
{ {
position_history_t *ph; position_history_t *ph, *prev;
prev = &ent->ph[ent->current_position];
ent->current_position = (ent->current_position + 1) & HISTORY_MASK; ent->current_position = (ent->current_position + 1) & HISTORY_MASK;
ph = &ent->ph[ent->current_position]; ph = &ent->ph[ent->current_position];
VectorCopy( ent->curstate.origin, ph->origin ); VectorCopy( ent->curstate.origin, ph->origin );
VectorCopy( ent->curstate.angles, ph->angles ); VectorCopy( ent->curstate.angles, ph->angles );
if( ent->model && ent->model->type == mod_brush )
ph->animtime = ent->curstate.animtime; ph->animtime = ent->curstate.animtime;
else
ph->animtime = cl.time; // a1ba: for some reason, this sometimes still may happen
// at this time, I'm not sure whether this bug happens in delta readwrite code
// or server just decides to go backwards and really sends these values
if( ph->animtime < prev->animtime )
{
// try to deduce real animtime by looking up the difference between
// server messages (cl.mtime is never modified ny the interpolation code)
float diff = Q_max( 0, ent->curstate.msg_time - ent->prevstate.msg_time );
ph->animtime = prev->animtime + diff;
}
} }
/* /*
@ -496,9 +507,7 @@ int CL_InterpolateModel( cl_entity_t *e )
return 0; return 0;
} }
// HACKHACK: workaround buggy position history animtime if( Q_equal( t2, t1 ))
// going backward sometimes
if( Q_equal( t2, t1 ) || t2 < t1 )
{ {
VectorCopy( ph0->origin, e->origin ); VectorCopy( ph0->origin, e->origin );
VectorCopy( ph0->angles, e->angles ); VectorCopy( ph0->angles, e->angles );

Loading…
Cancel
Save