home *** CD-ROM | disk | FTP | other *** search
/ Quake 'em / QUAKEEM.BIN / quake / programs / radar0_5 / radar.qc < prev    next >
Encoding:
Text File  |  1996-08-21  |  2.5 KB  |  95 lines

  1. float(float v) anglemod;
  2. string(float yaw) YawToDir;
  3.  
  4. void() CallRadar =
  5. {
  6.         local entity head, selected;
  7.         local float dist, d, y;
  8.         local vector vdir;
  9.         local string str;
  10.  
  11.         if( self.ammo_cells < 5 )
  12.         {
  13.                 dprint("Radar:  Out of juice\n");
  14.                 return;
  15.         }
  16.  
  17.         self.ammo_cells = self.ammo_cells - 5;
  18.  
  19.         dist = 5000;
  20.         selected = world;
  21.  
  22.         head = findradius(self.origin, dist);
  23.  
  24.         while(head)
  25.         {
  26.                 vdir = head.origin - self.origin;
  27.                 d = vlen(vdir);
  28.                 traceline(self.origin, head.origin, TRUE, self);
  29.                 if( (head != self) && (d < dist) && ( ( trace_fraction < 1 ) || ( head.items & IT_INVISIBILITY ) ) && ( head.health > 0 ) && ( head.classname != "door" ) && ( head.classname != "trigger_multiple" ) )
  30.                 {
  31.                         selected = head;
  32.                         dist = d;
  33.                 }
  34.         head = head.chain;
  35.         }
  36.         
  37.         if( selected == world )
  38.         {
  39.                 dprint("Radar:  Nothing Detected\n");
  40.                 return;
  41.         }
  42.  
  43.         vdir = selected.origin - self.origin;
  44.         vdir = normalize(vdir);
  45.         y = vectoyaw(vdir);
  46.         dprint("Radar:  Detects ");
  47.  
  48.         if(selected.classname == "player")
  49.                 dprint(selected.netname);
  50.         else
  51.                 dprint(selected.classname);
  52.  
  53.         dprint(" ");
  54.         str = ftos(dist);
  55.         dprint(str);
  56.         dprint(" units to your ");
  57.         str = YawToDir(y);
  58.         dprint(str);
  59.         dprint("\n");
  60. };
  61.  
  62. string(float yaw) YawToDir =
  63. {
  64.         local float pyaw, diff;
  65.         local string dir;
  66.  
  67.         makevectors(self.angles);
  68.         pyaw = vectoyaw(v_forward);
  69.  
  70.         diff = pyaw - yaw;
  71.         diff = anglemod(diff);
  72.  
  73.         if( ( diff < 15 ) || ( diff > 345 ) )
  74.                 dir = "North";
  75.         else if( diff < 75 )
  76.                 dir = "NorthEast";
  77.         else if( diff < 105 )
  78.                 dir = "East";
  79.         else if( diff < 165 )
  80.                 dir = "SouthEast";
  81.         else if( diff < 195 )
  82.                 dir = "South";
  83.         else if( diff < 255 )
  84.                 dir = "SouthWest";
  85.         else if( diff < 285 )
  86.                 dir = "West";
  87.         else if( diff <= 345 )
  88.                 dir = "NorthWest";
  89.         else
  90.                 dir = "ERROR";
  91.  
  92.         return dir;
  93. };
  94.  
  95.