]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/client/interpolate.qc
iapply the vid_conwidth/height ratio for the sprites
[divverent/nexuiz.git] / data / qcsrc / client / interpolate.qc
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;
6 .float itime1, itime2;
7 void InterpolateOrigin_Note()
8 {
9         float dt;
10
11         dt = time - self.itime1;
12
13         self.iorigin1 = self.iorigin2;
14         self.iorigin2 = self.origin;
15
16         if(self.iflags & IFLAG_ANGLES)
17         {
18                 fixedmakevectors(self.angles);
19                 self.iforward1 = self.iforward2;
20                 self.iright1 = self.iright2;
21                 self.iforward2 = v_forward;
22                 self.iright2 = v_right;
23         }
24
25         if(self.iflags & IFLAG_VELOCITY)
26         {
27                 self.ivelocity1 = self.ivelocity2;
28                 self.ivelocity2 = self.velocity;
29         }
30
31         if(vlen(self.iorigin2 - self.iorigin1) > 1000)
32         {
33                 self.itime1 = self.itime2 = time; // don't lerp
34         }
35
36         if((self.iflags & IFLAG_VELOCITY) && (vlen(self.ivelocity2 - self.ivelocity1) > 1000))
37         {
38                 self.itime1 = self.itime2 = time; // don't lerp
39         }
40
41         if(dt < 0.2)
42         {
43                 self.itime1 = time;
44                 self.itime2 = time + getstatf(STAT_SYS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
45         }
46         else
47         {
48                 // don't lerp
49                 self.itime1 = self.itime2 = time;
50         }
51 }
52 void InterpolateOrigin_Do()
53 {
54         vector forward, right;
55         if(self.itime1 && self.itime2 && self.itime1 != self.itime2)
56         {
57                 float f;
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)
61                 {
62                         forward = (1 - f) * self.iforward1 + f * self.iforward2;
63                         right = (1 - f) * self.iright1 + f * self.iright2;
64                         self.angles = fixedvectoangles2(forward, right);
65                 }
66                 if(self.iflags & IFLAG_VELOCITY)
67                         self.velocity = (1 - f) * self.ivelocity1 + f * self.ivelocity2;
68         }
69 }
70 void InterpolateOrigin_Undo()
71 {
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;
77 }
78