X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fantilag.qc;h=c53452ab78b352836a0614970259a54be27be59d;hb=ef3193f7a8b94d570b83a09e5f75ba2c87fe2bb9;hp=8b1dc6de1dbd637c622879cca3007e3462a519b3;hpb=0e7ed909bffb4ff21f0c68d163edfc17487e380a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/antilag.qc b/qcsrc/server/antilag.qc index 8b1dc6de1..c53452ab7 100644 --- a/qcsrc/server/antilag.qc +++ b/qcsrc/server/antilag.qc @@ -3,17 +3,18 @@ .float antilag_times[ANTILAG_MAX_ORIGINS]; .float antilag_index; .vector antilag_saved_origin; +.float antilag_takenback; .float antilag_debug; -void antilag_dummy() -{ - self.antilag_times = 0; - self.antilag_origins = '0 0 0'; -} - void antilag_record(entity e, float t) { + if (e.vehicle && e.vehicle.vehicle_flags == VHF_PLAYERSLOT) + return; + + if(e.vehicle) + antilag_record(e.vehicle, t); + if(time < e.(antilag_times[e.antilag_index])) return; e.antilag_index = e.antilag_index + 1; @@ -24,6 +25,7 @@ void antilag_record(entity e, float t) if(e.antilag_debug) te_spark(antilag_takebackorigin(e, t - e.antilag_debug), '0 0 0', 32); + } // finds the index BEFORE t @@ -49,7 +51,7 @@ float antilag_find(entity e, float 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)); } @@ -61,24 +63,70 @@ vector antilag_takebackorigin(entity e, float t) i0 = antilag_find(e, t); if(i0 < 0) { - i0 = e.antilag_index - 1; - if(i0 < 0) - i0 = ANTILAG_MAX_ORIGINS - 1; + // IN THE PRESENT + if(e.antilag_takenback) + return e.antilag_saved_origin; + else + return e.origin; } i1 = i0 + 1; 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 && e.vehicle.vehicle_flags == VHF_PLAYERSLOT) + return; + + 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 && e.vehicle.vehicle_flags == VHF_PLAYERSLOT) + return; + + if(e.vehicle) + antilag_restore(e.vehicle); + + if(!e.antilag_takenback) + return; + setorigin(e, e.antilag_saved_origin); + e.antilag_takenback = FALSE; +} + +void antilag_clear(entity e) +{ + float i; + + antilag_restore(e); + for(i = 0; i < ANTILAG_MAX_ORIGINS; ++i) + { + e.(antilag_times[i]) = -2342; + e.(antilag_origins[i]) = e.origin; + } + e.antilag_index = ANTILAG_MAX_ORIGINS - 1; // next one is 0 }