//a_angles.inc  
 //Geometric angle functions  
 //Created by:  
 //Tannz0rz  

 #if defined _a_angles_included  
   #endinput  
 #endif  
 #define _a_angles_included  

 #include <a_samp>  

 stock IsPlayerBehindPlayer(playerid, targetid, Float:dOffset)  
 {  

  new  
      Float:pa,  
      Float:ta;  

  if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;  
    
  GetPlayerFacingAngle(playerid, pa);  
  GetPlayerFacingAngle(targetid, ta);  
    
  if(AngleInRangeOfAngle(pa, ta, dOffset) && IsPlayerFacingPlayer(playerid, targetid, dOffset)) return true;  

  return false;  

 }  

 stock SetPlayerToFacePlayer(playerid, targetid)  
 {  

  new  
   Float:pX,  
   Float:pY,  
   Float:pZ,  
   Float:X,  
   Float:Y,  
   Float:Z,  
   Float:ang;  

  if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;  

  GetPlayerPos(targetid, X, Y, Z);  
  GetPlayerPos(playerid, pX, pY, pZ);  

  if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);  
  else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);  
  else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);  

  if(X > pX) ang = (floatabs(floatabs(ang) + 180.0));  
  else ang = (floatabs(ang) - 180.0);  
    
  SetPlayerFacingAngle(playerid, ang);  

   return 0;  

 }  

 stock IsPlayerFacingPlayer(playerid, targetid, Float:dOffset)  
 {  

  new  
   Float:pX,  
   Float:pY,  
   Float:pZ,  
   Float:pA,  
   Float:X,  
   Float:Y,  
   Float:Z,  
   Float:ang;  

  if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;  

  GetPlayerPos(targetid, pX, pY, pZ);  
  GetPlayerPos(playerid, X, Y, Z);  
  GetPlayerFacingAngle(playerid, pA);  

  if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);  
  else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);  
  else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);  

  if(AngleInRangeOfAngle(-ang, pA, dOffset)) return true;  

  return false;  

 }  

 stock AngleInRangeOfAngle(Float:a1, Float:a2, Float:range)  
 {  

  a1 -= a2;  
  if((a1 < range) && (a1 > -range)) return true;  

  return false;  

 }  