Last night I made a distance based FOV with SEGnosis guide. I does not work and returns realDist returns weird values (very high values which seems to depend on which angle I am looking towards an enemy).
Code:
int GetClosestEnemy(HANDLE hProc, DWORD clientDll, DWORD engineDll, Vector localPosition, Vector viewAngles)
{
float shortestDist = 5.f;
Vector closestAng;
int closestEnemy = -1;
viewAngles.x += Player.getPunch(hProc, clientDll).x * 2;
viewAngles.y += Player.getPunch(hProc, clientDll).y * 2;
for (int i = 0; i < 64; i++)
{
DWORD ent = Entity.getEntityBase(hProc, clientDll, i);
if (!ent)
continue;
if (Entity.getHealth(hProc, clientDll, i) > 0 && Entity.getTeam(hProc, clientDll, i) != Player.getTeam(hProc, clientDll) && i > 0 && Entity.radarSpotted(hProc, clientDll, i) == true && Entity.getFlags(hProc, clientDll, i) != 776)
{
Vector headPos = Entity.getHeadPos(hProc, clientDll, i);
Vector vAngle = CalcAngle(localPosition, headPos);
Normalize(vAngle);
float dist3d = Get3dDist(localPosition, headPos);
float dist = sqrt(pow(viewAngles.x - vAngle.x, 2) + pow(viewAngles.y - vAngle.y, 2));
float yaw = sin((abs(viewAngles.y - vAngle.y)) * 57.295779513082f) * dist3d;
float pitch = sin((abs(viewAngles.x - vAngle.x)) * 57.295779513082f) * dist3d;
float realDist = sqrt(powf(pitch, 2.0) + powf(yaw, 2.0));
std::cout << realDist << std::endl;
if (realDist < shortestDist)
{
shortestDist = realDist;
closestEnemy = i;
}
}
if (shortestDist != 5.f && closestEnemy > 0 && closestEnemy < 64)
{
return closestEnemy;
}
}
}
Code:
float Get3dDist(Vector localPosition, Vector enemyPos)
{
float dist;
dist = sqrt(pow(localPosition.x - enemyPos.x, 2) + pow(localPosition.y - enemyPos.y, 2) + pow(localPosition.z - enemyPos.z, 2));
return dist;
}