INT isVisible(Vec3 EnemyPos, Vec3 MyPos)
{
Vec3 vTemp;
ray_hit tmpHit;
vTemp.x = EnemyPos.x - MyPos.x;
vTemp.y = EnemyPos.y - MyPos.y;
vTemp.z = EnemyPos.z - MyPos.z;
return !SSystemGlobalEnvironment::GetInstance()->pPhysicalWorld()->RayWorldIntersection(MyPos, vTemp, 776, (10 & 0x0F), &tmpHit, 1);
}
template<typename ClassData>
__forceinline ClassData CallFunction(PVOID64 BaseClass, INT vIndex)
{
PDWORD64* vPointer = (PDWORD64*)BaseClass;
PDWORD64 vFunction = *vPointer;
DWORD64 dwAddress = vFunction[vIndex / 8];
return (ClassData)(dwAddress);
}
class IPhysicalWorld
{
public:
int RayWorldIntersection(SRWIParams & rp, const char* pNameTag, int iCaller)
{
return CallFunction<int(__thiscall*)(PVOID, SRWIParams&, const char*, int)>(this, 280)(this, rp, pNameTag, iCaller);
}
INT RayWorldIntersection(const Vec3& org, const Vec3& dir, int objtypes, unsigned int flags, ray_hit *hits, int nMaxHits = 1, IPhysicalEntity **pSkipEnts = 0, int nSkipEnts = 0, void *pForeignData = 0, int iForeignData = 0, const char *pNameTag = "RayWorldIntersection(Game)", ray_hit_cached *phitLast = 0, int iCaller = 4)
{
return CallFunction<int(__thiscall*)(PVOID, const Vec3&, const Vec3&, int, unsigned int, ray_hit*, int, IPhysicalEntity **, int, void *, int, const char *, ray_hit_cached *, int)>(this, 776)(this, org, dir, objtypes, flags, hits, nMaxHits, pSkipEnts, nSkipEnts, pForeignData, iForeignData, pNameTag, phitLast, iCaller);
}
};