.float antilag_times[ANTILAG_MAX_ORIGINS];
.float antilag_index;
.vector antilag_saved_origin;
+.float antilag_takenback;
.float antilag_debug;
void antilag_record(entity e, float t)
{
+ if(e.vehicle)
+ antilag_record(e.vehicle, t);
+
if(time < e.(antilag_times[e.antilag_index]))
return;
e.antilag_index = e.antilag_index + 1;
if(e.antilag_debug)
te_spark(antilag_takebackorigin(e, t - e.antilag_debug), '0 0 0', 32);
+
}
// finds the index BEFORE t
return -1;
}
-vector lerp(float t0, vector v0, float t1, vector v1, float t)
+vector lerpv(float t0, vector v0, float t1, vector v1, float t)
{
return v0 + (v1 - v0) * ((t - t0) / (t1 - t0));
}
if(i1 >= ANTILAG_MAX_ORIGINS)
i1 = 0;
- return lerp(e.(antilag_times[i0]), e.(antilag_origins[i0]), e.(antilag_times[i1]), e.(antilag_origins[i1]), t);
+ return lerpv(e.(antilag_times[i0]), e.(antilag_origins[i0]), e.(antilag_times[i1]), e.(antilag_origins[i1]), t);
+}
+
+vector antilag_takebackavgvelocity(entity e, float t0, float t1)
+{
+ vector o0, o1;
+
+ if(t0 >= t1)
+ return '0 0 0';
+ o0 = antilag_takebackorigin(e, t0);
+ o1 = antilag_takebackorigin(e, t1);
+ return (o1 - o0) * (1 / (t1 - t0));
}
void antilag_takeback(entity e, float t)
{
- e.antilag_saved_origin = e.origin;
+ if(e.vehicle)
+ antilag_takeback(e.vehicle, t);
+
+ if(!e.antilag_takenback)
+ e.antilag_saved_origin = e.origin;
+
setorigin(e, antilag_takebackorigin(e, t));
+ e.antilag_takenback = TRUE;
}
void antilag_restore(entity e)
{
+ if(e.vehicle)
+ antilag_restore(e.vehicle);
+
+ if(!e.antilag_takenback)
+ return;
+
setorigin(e, e.antilag_saved_origin);
+ e.antilag_takenback = FALSE;
}