Advertisement
SlashQ

angdist

Nov 26th, 2011
624
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.43 KB | None | 0 0
  1. // Angle & Distance Management by SlashQ
  2. // I didn't make these, but rather optimize the codes & shove them in an include.
  3.  
  4. #include <a_samp>
  5.  
  6. stock Float:GetDistanceBetweenPlayers(p1, p2) {
  7.  
  8.     new
  9.         Float: x1,
  10.         Float: y1,
  11.         Float: z1,
  12.         Float: x2,
  13.         Float: y2,
  14.         Float: z2;
  15.        
  16.     if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2)) return -1.00;
  17.  
  18.     GetPlayerPos(p1, x1, y1, z1);
  19.     GetPlayerPos(p2, x2, y2, z2);
  20.  
  21.     return floatsqroot(floatpower(floatabs(floatsub(x2, x1)), 2) + floatpower(floatabs(floatsub(y2, y1)), 2) + floatpower(floatabs(floatsub(z2, z1)), 2));
  22. }
  23.  
  24. stock Float:DistanceCameraTargetToLocation(Float:camX, Float:camY, Float:camZ, Float:objX, Float:objY, Float:objZ, Float:frX, Float:frY, Float:frZ) {
  25.  
  26.     new
  27.         Float: dist = floatsqroot((camX - objX) * (camX - objX) + (camY - objY) * (camY - objY) + (camZ - objZ) * (camZ - objZ)),
  28.         Float: tmpX = (frX * dist) + camX,
  29.         Float: tmpY = (frY * dist) + camY,
  30.         Float: tmpZ = (frZ * dist) + camZ;
  31.        
  32.     return floatsqroot((tmpX - objX) * (tmpX - objX) + (tmpY - objY) * (tmpY - objY) + (tmpZ - objZ) * (tmpZ - objZ));
  33. }
  34.  
  35. stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) {
  36.  
  37.     new
  38.         Float:dx,
  39.         Float:dy,
  40.         Float:angle;
  41.        
  42.     dx = floatabs(floatsub(x2, X));
  43.     dy = floatabs(floatsub(y2, Y));
  44.  
  45.     if (dy == 0.0 || dx == 0.0)
  46.     {
  47.         if(dy == 0 && dx > 0) angle = 0.0;
  48.         else if(dy == 0 && dx < 0) angle = 180.0;
  49.         else if(dy > 0 && dx == 0) angle = 90.0;
  50.         else if(dy < 0 && dx == 0) angle = 270.0;
  51.         else if(dy == 0 && dx == 0) angle = 0.0;
  52.     }
  53.     else
  54.     {
  55.         angle = atan(dx / dy);
  56.         if(X > x2 && Y <= y2) angle += 90.0;
  57.         else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
  58.         else if(X < x2 && Y >= y2) angle -= 90.0;
  59.         else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
  60.     }
  61.     return floatadd(angle, 90.0);
  62. }
  63.  
  64. stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, &Float:z, &Float:a) {
  65.  
  66.     GetPlayerPos(playerid, x, y, z);
  67.     GetPlayerFacingAngle(playerid, a);
  68.    
  69.     if (GetPlayerVehicleID(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  70.  
  71.     x += (DISTANCE * floatsin(-a, degrees));
  72.     y += (DISTANCE * floatcos(-a, degrees));
  73.     return 1;
  74. }
  75.  
  76. stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance) {
  77.  
  78.     x += (distance * floatsin(-angle, degrees));
  79.     y += (distance * floatcos(-angle, degrees));
  80.     return 1;
  81. }
  82.  
  83. stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius) {
  84.  
  85.     new
  86.         Float: cam_x,
  87.         Float: cam_y,
  88.         Float: cam_z,
  89.         Float: vector_x,
  90.         Float: vector_y,
  91.         Float: vector_z,
  92.         Float: vertical,
  93.         Float: horizontal,
  94.         Float: angle,
  95.         Float: resize_x,
  96.         Float: resize_y,
  97.         Float: resize_z;
  98.  
  99.     GetPlayerCameraPos(playerid, cam_x, cam_y, cam_z);
  100.     GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z);
  101.  
  102.     if(GetPlayerWeapon(playerid) > 0)
  103.     {
  104.         if(GetPlayerWeapon(playerid) == 34 || GetPlayerWeapon(playerid) == 35 || GetPlayerWeapon(playerid) == 36)
  105.         {
  106.             if (DistanceCameraTargetToLocation(cam_x, cam_y, cam_z, x, y, z, vector_x, vector_y, vector_z) < radius) return 1;
  107.             return 0;
  108.         }
  109.         else if(GetPlayerWeapon(playerid) == 30 || GetPlayerWeapon(playerid) == 31)
  110.         {
  111.             vertical = 4.0;
  112.             horizontal = -1.6;
  113.         }
  114.         else if(GetPlayerWeapon(playerid) == 33)
  115.         {
  116.             vertical = 2.7;
  117.             horizontal = -1.0;
  118.         }
  119.         else
  120.         {
  121.             vertical = 6.0;
  122.             horizontal = -2.2;
  123.         }
  124.     }
  125.  
  126.     angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x * vector_x + vector_y * vector_y), vector_z) - 270.0;
  127.     resize_x = floatsin((angle + vertical), degrees);
  128.     resize_y = floatsin((angle + vertical), degrees);
  129.     resize_z = floatsin((angle + vertical), degrees);
  130.  
  131.     GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y) + horizontal, floatcos(angle + vertical, degrees));
  132.     if (DistanceCameraTargetToLocation(cam_x, cam_y, cam_z, x, y, z, resize_x, resize_y, resize_z) < radius) return 1;
  133.     return 0;
  134. }
  135.  
  136. stock IsPlayerAimingAtPlayer(playerid, targetid) {
  137.  
  138.     new
  139.         Float:x,
  140.         Float:y,
  141.         Float:z;
  142.        
  143.     GetPlayerPos(targetid, x, y, z);
  144.  
  145.     if(IsPlayerAimingAt(playerid, x, y, z - 0.75, 0.25)) return 1;
  146.     else if(IsPlayerAimingAt(playerid, x, y, z - 0.25, 0.25)) return 1;
  147.     else if(IsPlayerAimingAt(playerid, x, y, z + 0.25, 0.25)) return 1;
  148.     else if(IsPlayerAimingAt(playerid, x, y, z + 0.75, 0.25)) return 1;
  149.     return 0;
  150. }
  151.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement