-entity FindLaserTarget(entity e, float dist_variance, float dot_variance)
-{
- entity head, selected;
- vector dir;
- float dist, maxdist,// bestdist,
- dot,// bestdot,
- points, bestpoints;
- //bestdist = 9999;
- //bestdot = -2;
- bestpoints = 0;
- maxdist = 800;
- selected = world;
-
- makevectors(e.angles);
-
- head = find(world, classname, "laser_target");
- while(head)
- {
- points = 0;
- dir = normalize(head.origin - self.origin);
- dot = dir * v_forward;
- dist = vlen(head.origin - self.origin);
- if(dist > maxdist)
- dist = maxdist;
-
- // gain points for being in front
- points = points + ((dot+1)*0.5) * 500
- * (1 + crandom()*dot_variance);
- // gain points for being close away
- points = points + (1 - dist/maxdist) * 1000
- * (1 + crandom()*dot_variance);
-
- traceline(e.origin, head.origin, TRUE, self);
- if(trace_fraction < 1)
- {
- points = 0;
- }
-
- if(points > bestpoints)//random() > 0.5)//
- {
- bestpoints = points;
- selected = head;
- }
-
- head = find(head, classname, "laser_target");
- }
-
- //bprint(selected.realowner.netname);
- //bprint("\n");
- return selected;
-}
-