53 lines
1.6 KiB
PHP
53 lines
1.6 KiB
PHP
|
// File Name : IsTargetInSightRange.inc
|
||
|
// File Version : 1.1
|
||
|
// File Updated date : 03-07-2013
|
||
|
|
||
|
/*
|
||
|
*Thanks to Javalia. he has helped to solve my question.
|
||
|
*/
|
||
|
|
||
|
stock bool:IsTargetInSightRange(client, target, Float:angle=90.0, Float:distance=0.0, bool:heightcheck=true, bool:negativeangle=false)
|
||
|
{
|
||
|
if(angle > 360.0 || angle < 0.0)
|
||
|
ThrowError("Angle Max : 360 & Min : 0. %d isn't proper angle.", angle);
|
||
|
if(!IsValidClient(client))
|
||
|
ThrowError("Client is not Alive.");
|
||
|
if(!IsValidClient(target))
|
||
|
ThrowError("Target is not Alive.");
|
||
|
|
||
|
decl Float:clientpos[3], Float:targetpos[3], Float:anglevector[3], Float:targetvector[3], Float:resultangle, Float:resultdistance;
|
||
|
|
||
|
GetClientEyeAngles(client, anglevector);
|
||
|
anglevector[0] = anglevector[2] = 0.0;
|
||
|
GetAngleVectors(anglevector, anglevector, NULL_VECTOR, NULL_VECTOR);
|
||
|
NormalizeVector(anglevector, anglevector);
|
||
|
if(negativeangle)
|
||
|
NegateVector(anglevector);
|
||
|
|
||
|
GetClientAbsOrigin(client, clientpos);
|
||
|
GetClientAbsOrigin(target, targetpos);
|
||
|
if(heightcheck && distance > 0)
|
||
|
resultdistance = GetVectorDistance(clientpos, targetpos);
|
||
|
clientpos[2] = targetpos[2] = 0.0;
|
||
|
MakeVectorFromPoints(clientpos, targetpos, targetvector);
|
||
|
NormalizeVector(targetvector, targetvector);
|
||
|
|
||
|
resultangle = RadToDeg(ArcCosine(GetVectorDotProduct(targetvector, anglevector)));
|
||
|
|
||
|
if(resultangle <= angle/2)
|
||
|
{
|
||
|
if(distance > 0)
|
||
|
{
|
||
|
if(!heightcheck)
|
||
|
resultdistance = GetVectorDistance(clientpos, targetpos);
|
||
|
if(distance >= resultdistance)
|
||
|
return true;
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
return false;
|
||
|
}
|