- // movement lerp
- if (e->persistent.lerpdeltatime > 0 && (lerp = (cl.time - e->persistent.lerpstarttime) / e->persistent.lerpdeltatime) < 1)
- {
- // interpolate the origin and angles
- VectorLerp(e->persistent.oldorigin, lerp, e->persistent.neworigin, origin);
- VectorSubtract(e->persistent.newangles, e->persistent.oldangles, delta);
- if (delta[0] < -180) delta[0] += 360;else if (delta[0] >= 180) delta[0] -= 360;
- if (delta[1] < -180) delta[1] += 360;else if (delta[1] >= 180) delta[1] -= 360;
- if (delta[2] < -180) delta[2] += 360;else if (delta[2] >= 180) delta[2] -= 360;
- VectorMA(e->persistent.oldangles, lerp, delta, angles);
- }
- else
- {
- // no interpolation
- VectorCopy(e->persistent.neworigin, origin);
- VectorCopy(e->persistent.newangles, angles);
- }
- // animation lerp
- if (e->render.frame2 == e->state_current.frame)
- {
- // update frame lerp fraction
- e->render.framelerp = 1;
- if (e->render.frame2time > e->render.frame1time)
- {
- e->render.framelerp = (cl.time - e->render.frame2time) / (e->render.frame2time - e->render.frame1time);
- e->render.framelerp = bound(0, e->render.framelerp, 1);
- }
- }
- else
- {
- // begin a new frame lerp
- e->render.frame1 = e->render.frame2;
- e->render.frame1time = e->render.frame2time;
- e->render.frame = e->render.frame2 = e->state_current.frame;
- e->render.frame2time = cl.time;
- e->render.framelerp = 0;
- // make sure frame lerp won't last longer than 100ms
- // (this mainly helps with models that use framegroups and
- // switch between them infrequently)
- e->render.frame1time = max(e->render.frame1time, e->render.frame2time - 0.1f);
- }
+ lerp = (cl.time - cl.mtime[1]) / (cl.mtime[0] - cl.mtime[1]);
+ lerp = bound(0, lerp, 1);
+ VectorLerp(cl.movement_oldorigin, lerp, cl.movement_origin, origin);
+ VectorSet(angles, 0, cl.viewangles[1], 0);
+ }
+ else if (e->persistent.lerpdeltatime > 0 && (lerp = (cl.time - e->persistent.lerpstarttime) / e->persistent.lerpdeltatime) < 1)
+ {
+ // interpolate the origin and angles
+ VectorLerp(e->persistent.oldorigin, lerp, e->persistent.neworigin, origin);
+ VectorSubtract(e->persistent.newangles, e->persistent.oldangles, delta);
+ if (delta[0] < -180) delta[0] += 360;else if (delta[0] >= 180) delta[0] -= 360;
+ if (delta[1] < -180) delta[1] += 360;else if (delta[1] >= 180) delta[1] -= 360;
+ if (delta[2] < -180) delta[2] += 360;else if (delta[2] >= 180) delta[2] -= 360;
+ VectorMA(e->persistent.oldangles, lerp, delta, angles);