1 // FIXME make this generic code, to be used for other entities too?
\r
2 .vector iorigin1, iorigin2;
\r
3 .vector ivelocity1, ivelocity2;
\r
4 .vector iforward1, iforward2;
\r
6 .float itime1, itime2;
\r
7 void InterpolateOrigin_Reset()
\r
9 self.iflags &~= (IFLAG_PREVALID | IFLAG_VALID);
\r
10 self.itime1 = self.itime2 = 0;
\r
12 void InterpolateOrigin_Note()
\r
16 dt = time - self.itime2;
\r
18 if(self.iflags & IFLAG_PREVALID)
\r
19 self.iflags |= IFLAG_VALID;
\r
21 self.iflags |= IFLAG_PREVALID;
\r
23 self.iorigin1 = self.iorigin2;
\r
24 self.iorigin2 = self.origin;
\r
26 if(self.iflags & IFLAG_AUTOANGLES)
\r
27 self.angles = vectoangles(self.iorigin2 - self.iorigin1);
\r
29 if(self.iflags & IFLAG_ANGLES)
\r
31 fixedmakevectors(self.angles);
\r
32 self.iforward1 = self.iforward2;
\r
33 self.iup1 = self.iup2;
\r
34 self.iforward2 = v_forward;
\r
38 if(self.iflags & IFLAG_VELOCITY)
\r
40 self.ivelocity1 = self.ivelocity2;
\r
41 self.ivelocity2 = self.velocity;
\r
44 if(vlen(self.iorigin2 - self.iorigin1) > 1000)
\r
46 self.itime1 = self.itime2 = time; // don't lerp
\r
49 if((self.iflags & IFLAG_VELOCITY) && (vlen(self.ivelocity2 - self.ivelocity1) > 1000))
\r
51 self.itime1 = self.itime2 = time; // don't lerp
\r
56 self.itime1 = serverprevtime;
\r
62 self.itime1 = self.itime2 = time;
\r
65 void InterpolateOrigin_Do()
\r
68 if(self.itime1 && self.itime2 && self.itime1 != self.itime2)
\r
71 f = bound(0, (time - self.itime1) / (self.itime2 - self.itime1), 1);
\r
72 self.origin = (1 - f) * self.iorigin1 + f * self.iorigin2;
\r
73 if(self.iflags & IFLAG_ANGLES)
\r
75 forward = (1 - f) * self.iforward1 + f * self.iforward2;
\r
76 up = (1 - f) * self.iup1 + f * self.iup2;
\r
77 self.angles = fixedvectoangles2(forward, up);
\r
79 if(self.iflags & IFLAG_VELOCITY)
\r
80 self.velocity = (1 - f) * self.ivelocity1 + f * self.ivelocity2;
\r
83 void InterpolateOrigin_Undo()
\r
85 self.origin = self.iorigin2;
\r
86 if(self.iflags & IFLAG_ANGLES)
\r
87 self.angles = fixedvectoangles2(self.iforward2, self.iup2);
\r
88 if(self.iflags & IFLAG_VELOCITY)
\r
89 self.velocity = self.ivelocity2;
\r