From ca1bffc8e4732595726672a07645be908d2fd413 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Mon, 14 Nov 2011 16:54:19 +0100 Subject: [PATCH] add EF_TELEPORT_BIT support too --- qcsrc/client/interpolate.qc | 20 +++++++++++--------- qcsrc/client/interpolate.qh | 1 + qcsrc/csqcmodel/cl_model.qc | 3 +++ qcsrc/csqcmodel/common.qc | 1 + qcsrc/csqcmodel/sv_model.qc | 6 ++++++ 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/qcsrc/client/interpolate.qc b/qcsrc/client/interpolate.qc index 3d6a1033a..a3140c8e7 100644 --- a/qcsrc/client/interpolate.qc +++ b/qcsrc/client/interpolate.qc @@ -52,26 +52,28 @@ void InterpolateOrigin_Note() self.ivelocity2 = self.velocity; } - if(vlen(self.iorigin2 - self.iorigin1) > 1000) + if(self.iflags & IFLAG_TELEPORTED) { + self.iflags &~= IFLAG_TELEPORTED; self.itime1 = self.itime2 = time; // don't lerp } - - if((self.iflags & IFLAG_VELOCITY) && (vlen(self.ivelocity2 - self.ivelocity1) > 1000)) + else if(vlen(self.iorigin2 - self.iorigin1) > 1000) { self.itime1 = self.itime2 = time; // don't lerp } - - if(dt < 0.2) + else if((self.iflags & IFLAG_VELOCITY) && (vlen(self.ivelocity2 - self.ivelocity1) > 1000)) { - self.itime1 = serverprevtime; - self.itime2 = time; + self.itime1 = self.itime2 = time; // don't lerp } - else + else if(dt >= 0.2) { - // don't lerp self.itime1 = self.itime2 = time; } + else + { + self.itime1 = serverprevtime; + self.itime2 = time; + } } void InterpolateOrigin_Do() { diff --git a/qcsrc/client/interpolate.qh b/qcsrc/client/interpolate.qh index a0488038c..1035c99f9 100644 --- a/qcsrc/client/interpolate.qh +++ b/qcsrc/client/interpolate.qh @@ -4,6 +4,7 @@ #define IFLAG_AUTOANGLES 4 #define IFLAG_VALID 8 #define IFLAG_PREVALID 16 +#define IFLAG_TELEPORTED 32 #define IFLAG_INTERNALMASK (IFLAG_VALID | IFLAG_PREVALID) // call this BEFORE reading an entity update diff --git a/qcsrc/csqcmodel/cl_model.qc b/qcsrc/csqcmodel/cl_model.qc index 791205bb3..e5bf9c54a 100644 --- a/qcsrc/csqcmodel/cl_model.qc +++ b/qcsrc/csqcmodel/cl_model.qc @@ -176,6 +176,9 @@ void CSQCModel_Read() ALLPROPERTIES #undef PROPERTY_SCALED #undef PROPERTY + + if(sf & PROPERTY_TELEPORTED) + self.iflags |= IFLAG_TELEPORTED; CSQCModel_InterpolateAnimation_Note(sf); InterpolateOrigin_Note(); diff --git a/qcsrc/csqcmodel/common.qc b/qcsrc/csqcmodel/common.qc index 7df1f295e..452674946 100644 --- a/qcsrc/csqcmodel/common.qc +++ b/qcsrc/csqcmodel/common.qc @@ -9,6 +9,7 @@ #define PROPERTY_FRAME 32768 #define PROPERTY_FRAME2 16384 #define PROPERTY_LERPFRAC 8192 +#define PROPERTY_TELEPORTED 4096 // the "teleport bit" cancelling interpolation #define ALLPROPERTIES_COMMON \ PROPERTY(PROPERTY_FRAME, ReadByte, WriteByte, frame) \ diff --git a/qcsrc/csqcmodel/sv_model.qc b/qcsrc/csqcmodel/sv_model.qc index 09df3c828..59b8b284b 100644 --- a/qcsrc/csqcmodel/sv_model.qc +++ b/qcsrc/csqcmodel/sv_model.qc @@ -57,6 +57,12 @@ void CSQCModel_CheckUpdate() self.effects &~= EF_RESTARTANIM_BIT; } + if(self.effects & EF_TELEPORT_BIT) + { + self.SendFlags |= PROPERTY_TELEPORTED; // no interpolation please + self.effects &~= EF_TELEPORT_BIT; + } + #define PROPERTY(flag,r,w,f) \ tmp = self.f; \ if(tmp != self.csqcmodel_##f) \ -- 2.39.2