]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/tturrets/system/system_aimprocs.qc
fix a typo in turret code
[divverent/nexuiz.git] / data / qcsrc / server / tturrets / system / system_aimprocs.qc
1 /*\r
2 * Straight line, Dead-on (no prediction)\r
3 * Usefull for "stupid turrets" or ones\r
4 * that launch guided weapons and just need to apeer to\r
5 * somewhat face (and/or track) the target.\r
6 \r
7 supports:\r
8 TFL_AIM_NO\r
9 */\r
10 /*\r
11 vector turret_stdproc_aim_simple()\r
12 {\r
13     float s_bu;     // Solidity backup (for ground shooters)\r
14     vector aim_pos;\r
15 \r
16     if (self.aim_flags & TFL_AIM_NO) return self.idle_aim;\r
17 \r
18     aim_pos = self.enemy.origin;\r
19 \r
20     // Target ground?\r
21     if (self.aim_flags & TFL_AIM_GROUND)\r
22     {\r
23         s_bu = self.enemy.solid;\r
24         self.enemy.solid = SOLID_NOT;\r
25         traceline(self.enemy.origin + '0 0 128',self.enemy.origin + '0 0 -99999',1,self.enemy);\r
26         self.enemy.solid = s_bu;\r
27         aim_pos = trace_endpos;\r
28     }\r
29 \r
30     // This is where its at.\r
31     return aim_pos;\r
32 }\r
33 */\r
34 \r
35 /*\r
36 * Generic aim\r
37 \r
38 supports:\r
39 TFL_AIM_NO\r
40 TFL_AIM_GROUND\r
41 TFL_AIM_LEAD\r
42 TFL_AIM_SHOTTIMECOMPENSATE\r
43 TFL_AIM_INFRONT\r
44 TFL_AIM_BEHIND\r
45 TFL_AIM_ZEASE\r
46 \r
47 not supported:\r
48 TFL_AIM_BALISTIC\r
49 */\r
50 \r
51 \r
52 vector turret_stdproc_aim_generic()\r
53 {\r
54     vector pre_pos;\r
55     // entity mover;\r
56 \r
57     if (self.aim_flags == TFL_AIM_NO)\r
58         return self.idle_aim;\r
59 \r
60     // Baseline\r
61     pre_pos = real_origin(self.enemy);\r
62 \r
63     if(self.aim_flags & TFL_AIM_SIMPLE)\r
64         return pre_pos;\r
65 \r
66     // Lead?\r
67     //pre_pos = pre_pos + bot_shotlead(self.enemy.origin, self.enemy.velocity, self.shot_speed, 0.01); //self.enemy.velocity;  * (self.tur_dist_enemy / self.shot_speed);\r
68     if (self.aim_flags & TFL_AIM_LEAD)\r
69         if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE)       // Need to conpensate for shot traveltime\r
70         {\r
71             pre_pos = pre_pos + self.enemy.velocity  * (self.tur_dist_enemy / self.shot_speed);\r
72 \r
73             // FIXME slow projectiles misspredict (well all do, bit the slow ons miss :P)\r
74         }\r
75         else if (self.turrcaps_flags & TFL_TURRCAPS_HITSCAN)   // Hitscan gun, conpensate for frametime and posibly refire offset.\r
76             pre_pos = pre_pos + self.enemy.velocity * (frametime + min(max(self.attack_finished_single - time,0),self.ticrate*2));\r
77         else                                                   // No lead\r
78             pre_pos += self.enemy.velocity;\r
79 \r
80 \r
81     // Smooth out predict-Z?\r
82     /*\r
83     if (self.aim_flags & TFL_AIM_ZEASE)\r
84     {\r
85         vector v;\r
86         v = real_origin(self.enemy);\r
87         pre_pos_z = (pre_pos_z  + v_z) * 0.5;\r
88     }\r
89     */\r
90 \r
91     /*\r
92     if (self.aim_flags & TFL_AIM_INFRONT)   // Aim a bit in front of the target\r
93         pre_pos -= normalize(self.tur_aimorg_updated - pre_pos) * 32;\r
94 \r
95     if (self.aim_flags & TFL_AIM_BEHIND)    // Aim a bit behind the target\r
96         pre_pos += normalize(self.tur_aimorg_updated - pre_pos) * 32;\r
97 \r
98     */\r
99     // This turret should hit the ground neer a target rather the do a direct hit\r
100 \r
101     if ( (self.aim_flags & TFL_AIM_GROUND) ||\r
102          ((self.aim_flags & TFL_AIM_GROUND2) && (self.enemy.flags & FL_ONGROUND)) )\r
103     {\r
104         traceline(pre_pos + '0 0 8',pre_pos - '0 0 10000',1,self.enemy);\r
105         pre_pos = trace_endpos;\r
106     }\r
107 \r
108 \r
109 \r
110 \r
111 \r
112 \r
113 \r
114     return pre_pos;\r
115 }\r
116 \r
117 \r
118 /*\r
119 * Aim where it is\r
120 supports:\r
121 TFL_AIM_NO\r
122 */\r
123 /*\r
124 vector turret_stdproc_aim_rail()\r
125 {\r
126     vector pre_pos;\r
127 \r
128     if (self.aim_flags & TFL_AIM_NO)\r
129         return self.idle_aim;\r
130 \r
131     pre_pos = real_origin(self.enemy);\r
132 \r
133     self.tur_dist_toaimpos = vlen(self.enemy.origin - self.tur_aimorg_updated);\r
134 \r
135     self.tur_impacttime = time;\r
136 \r
137     return pre_pos;\r
138 \r
139 }\r
140 */\r