X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcsqcmodellib%2Finterpolate.qc;h=994323cfe037334bed894624c7c12089108b069d;hb=2eb949d3db8ca2ddf243fbeb188b2a1c0c79d4ec;hp=55f134126fd7472eb1a33b1ba9a8a7d00d0b979a;hpb=a9348aa104fa1e9b69b7e6c3ede8a5e93c4ee3dd;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/csqcmodellib/interpolate.qc b/qcsrc/csqcmodellib/interpolate.qc index 55f134126..994323cfe 100644 --- a/qcsrc/csqcmodellib/interpolate.qc +++ b/qcsrc/csqcmodellib/interpolate.qc @@ -24,10 +24,12 @@ .vector ivelocity1, ivelocity2; .vector iforward1, iforward2; .vector iup1, iup2; +.vector ivforward1, ivforward2; +.vector ivup1, ivup2; .float itime1, itime2; void InterpolateOrigin_Reset() { - self.iflags &~= IFLAG_INTERNALMASK; + self.iflags &= ~IFLAG_INTERNALMASK; self.itime1 = self.itime2 = 0; } void InterpolateOrigin_Note() @@ -43,13 +45,20 @@ void InterpolateOrigin_Note() else self.iflags |= IFLAG_PREVALID; - self.iorigin1 = self.iorigin2; - self.iorigin2 = self.origin; + if(self.iflags & IFLAG_ORIGIN) + { + self.iorigin1 = self.iorigin2; + self.iorigin2 = self.origin; + } if(self.iflags & IFLAG_AUTOANGLES) if(self.iorigin2 != self.iorigin1) self.angles = vectoangles(self.iorigin2 - self.iorigin1); + if(self.iflags & IFLAG_AUTOVELOCITY) + if(self.itime2 != self.itime1) + self.velocity = (self.iorigin2 - self.iorigin1) * (1.0 / (self.itime2 - self.itime1)); + if(self.iflags & IFLAG_ANGLES) { fixedmakevectors(self.angles); @@ -67,6 +76,28 @@ void InterpolateOrigin_Note() self.iup2 = v_up; } + if(self.iflags & IFLAG_V_ANGLE) + { + fixedmakevectors(self.v_angle); + if(f0 & IFLAG_VALID) + { + self.ivforward1 = self.ivforward2; + self.ivup1 = self.ivup2; + } + else + { + self.ivforward1 = v_forward; + self.ivup1 = v_up; + } + self.ivforward2 = v_forward; + self.ivup2 = v_up; + } + else if(self.iflags & IFLAG_V_ANGLE_X) + { + self.ivforward1_x = self.ivforward2_x; + self.ivforward2_x = self.v_angle_x; + } + if(self.iflags & IFLAG_VELOCITY) { self.ivelocity1 = self.ivelocity2; @@ -75,7 +106,7 @@ void InterpolateOrigin_Note() if(self.iflags & IFLAG_TELEPORTED) { - self.iflags &~= IFLAG_TELEPORTED; + self.iflags &= ~IFLAG_TELEPORTED; self.itime1 = self.itime2 = time; // don't lerp } else if(vlen(self.iorigin2 - self.iorigin1) > 1000) @@ -103,22 +134,36 @@ void InterpolateOrigin_Do() { float f; f = bound(0, (time - self.itime1) / (self.itime2 - self.itime1), 1 + autocvar_cl_lerpexcess); - self.origin = (1 - f) * self.iorigin1 + f * self.iorigin2; + if(self.iflags & IFLAG_ORIGIN) + setorigin(self, (1 - f) * self.iorigin1 + f * self.iorigin2); if(self.iflags & IFLAG_ANGLES) { forward = (1 - f) * self.iforward1 + f * self.iforward2; up = (1 - f) * self.iup1 + f * self.iup2; self.angles = fixedvectoangles2(forward, up); } + if(self.iflags & IFLAG_V_ANGLE) + { + forward = (1 - f) * self.ivforward1 + f * self.ivforward2; + up = (1 - f) * self.ivup1 + f * self.ivup2; + self.v_angle = fixedvectoangles2(forward, up); + } + else if(self.iflags & IFLAG_V_ANGLE_X) + self.v_angle_x = (1 - f) * self.ivforward1_x + f * self.ivforward2_x; if(self.iflags & IFLAG_VELOCITY) self.velocity = (1 - f) * self.ivelocity1 + f * self.ivelocity2; } } void InterpolateOrigin_Undo() { - setorigin(self, self.iorigin2); + if(self.iflags & IFLAG_ORIGIN) + setorigin(self, self.iorigin2); if(self.iflags & IFLAG_ANGLES) self.angles = fixedvectoangles2(self.iforward2, self.iup2); + if(self.iflags & IFLAG_V_ANGLE) + self.v_angle = fixedvectoangles2(self.ivforward2, self.ivup2); + else if(self.iflags & IFLAG_V_ANGLE_X) + self.v_angle_x = self.ivforward2_x; if(self.iflags & IFLAG_VELOCITY) self.velocity = self.ivelocity2; }