8 TFL_AIM_SHOTTIMECOMPENSATE
19 vector turret_stdproc_aim_generic()
23 float distance, impact_time, i, mintime;
25 turret_tag_fire_update();
27 if(self.aim_flags & TFL_AIM_SIMPLE)
28 return real_origin(self.enemy);
30 mintime = max(self.attack_finished_single - time,0) + sys_frametime;
33 pre_pos = real_origin(self.enemy);
35 if (self.aim_flags & TFL_AIM_INFRONT) // Aim a bit in front of the target
36 pre_pos = pre_pos + (normalize(self.enemy.velocity) * 64);
38 if (self.aim_flags & TFL_AIM_BEHIND) // Aim a bit behind the target
39 pre_pos = pre_pos - (normalize(self.enemy.velocity) * 32);
42 if (self.aim_flags & TFL_AIM_LEAD)
44 if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE) // Need to conpensate for shot traveltime
46 // FIXME: this cant be the best way to do this..
48 for(i = 0; i < 4; ++i)
50 distance = vlen(prep - self.tur_shotorg);
51 impact_time = distance / self.shot_speed;
52 prep = pre_pos + self.enemy.velocity * impact_time;
55 prep = pre_pos + (self.enemy.velocity * (impact_time + mintime));
57 if(self.aim_flags & TFL_AIM_ZPREDICT)
58 if not(self.enemy.flags & FL_ONGROUND)
59 if(self.enemy.movetype == MOVETYPE_WALK || self.enemy.movetype == MOVETYPE_TOSS || self.enemy.movetype == MOVETYPE_BOUNCE)
63 vz = self.enemy.velocity_z;
64 for(i = 0; i < impact_time; i += sys_frametime)
66 vz = vz - (autocvar_sv_gravity * sys_frametime);
67 prep_z = prep_z + vz * sys_frametime;
73 pre_pos = pre_pos + self.enemy.velocity * mintime;
76 if(self.aim_flags & TFL_AIM_GROUND2)
78 //tracebox(pre_pos + '0 0 32',self.enemy.mins,self.enemy.maxs,pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
79 traceline(pre_pos + '0 0 32',pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
80 if(trace_fraction != 1.0)
81 pre_pos = trace_endpos;