1 // FIXME make this generic code, to be used for other entities too?
2 .vector iorigin1, iorigin2;
3 .vector ivelocity1, ivelocity2;
4 .vector iforward1, iforward2;
5 .vector iright1, iright2;
7 void InterpolateOrigin_Note()
11 dt = time - self.itime1;
13 self.iorigin1 = self.iorigin2;
14 self.iorigin2 = self.origin;
16 if(self.iflags & IFLAG_ANGLES)
18 fixedmakevectors(self.angles);
19 self.iforward1 = self.iforward2;
20 self.iright1 = self.iright2;
21 self.iforward2 = v_forward;
22 self.iright2 = v_right;
25 if(self.iflags & IFLAG_VELOCITY)
27 self.ivelocity1 = self.ivelocity2;
28 self.ivelocity2 = self.velocity;
31 if(vlen(self.iorigin2 - self.iorigin1) > 1000)
33 self.itime1 = self.itime2 = time; // don't lerp
36 if((self.iflags & IFLAG_VELOCITY) && (vlen(self.ivelocity2 - self.ivelocity1) > 1000))
38 self.itime1 = self.itime2 = time; // don't lerp
44 self.itime2 = time + getstatf(STAT_SYS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
49 self.itime1 = self.itime2 = time;
52 void InterpolateOrigin_Do()
54 vector forward, right;
55 if(self.itime1 && self.itime2 && self.itime1 != self.itime2)
58 f = bound(0, (time - self.itime1) / (self.itime2 - self.itime1), 1);
59 self.origin = (1 - f) * self.iorigin1 + f * self.iorigin2;
60 if(self.iflags & IFLAG_ANGLES)
62 forward = (1 - f) * self.iforward1 + f * self.iforward2;
63 right = (1 - f) * self.iright1 + f * self.iright2;
64 self.angles = fixedvectoangles2(forward, right);
66 if(self.iflags & IFLAG_VELOCITY)
67 self.velocity = (1 - f) * self.ivelocity1 + f * self.ivelocity2;
70 void InterpolateOrigin_Undo()
72 self.origin = self.iorigin2;
73 if(self.iflags & IFLAG_ANGLES)
74 self.angles = fixedvectoangles2(self.iforward2, self.iright2);
75 if(self.iflags & IFLAG_VELOCITY)
76 self.velocity = self.ivelocity2;