void CResolver::StoreAntifreestand()
{
if (!g_cl.m_local->alive())
return;
for (int i = 1; i < g_csgo.m_globals->m_max_clients; ++i)
{
auto player = (Player*)g_csgo.m_entlist->GetClientEntity(i);
if (!player || !player->m_lifeState() == LIFE_ALIVE || player->dormant() || player->m_iTeamNum() == g_cl.m_local->m_iTeamNum())
continue;
bool Autowalled = false, HitSide1 = false, HitSide2 = false;
auto idx = player->index();
float angToLocal = math::CalcAngle(g_cl.m_local->m_vecOrigin(), player->m_vecOrigin()).y;
vec3_t ViewPoint = g_cl.m_local->m_vecOrigin() + vec3_t(0, 0, 90);
vec2_t Side1 = { (45 * sin(math::deg_to_rad(angToLocal))),(45 * cos(math::deg_to_rad(angToLocal))) };
vec2_t Side2 = { (45 * sin(math::deg_to_rad(angToLocal + 180))) ,(45 * cos(math::deg_to_rad(angToLocal + 180))) };
vec2_t Side3 = { (50 * sin(math::deg_to_rad(angToLocal))),(50 * cos(math::deg_to_rad(angToLocal))) };
vec2_t Side4 = { (50 * sin(math::deg_to_rad(angToLocal + 180))) ,(50 * cos(math::deg_to_rad(angToLocal + 180))) };
vec3_t Origin = player->m_vecOrigin();
vec2_t OriginLeftRight[] = { vec2_t(Side1.x, Side1.y), vec2_t(Side2.x, Side2.y) };
vec2_t OriginLeftRightLocal[] = { vec2_t(Side3.x, Side3.y), vec2_t(Side4.x, Side4.y) };
for (int side = 0; side < 2; side++)
{
vec3_t OriginAutowall = { Origin.x + OriginLeftRight[side].x, Origin.y - OriginLeftRight[side].y , Origin.z + 90 };
vec3_t ViewPointAutowall = { ViewPoint.x + OriginLeftRightLocal[side].x, ViewPoint.y - OriginLeftRightLocal[side].y , ViewPoint.z };
if (penetration::CanHitFloatingPoint(OriginAutowall, ViewPoint))
{
if (side == 0)
{
HitSide1 = true;
FreestandSide[idx] = -1;
}
else if (side == 1)
{
HitSide2 = true;
FreestandSide[idx] = 1;
}
Autowalled = true;
}
else
{
for (int sidealternative = 0; sidealternative < 2; sidealternative++)
{
vec3_t ViewPointAutowallalternative = { Origin.x + OriginLeftRight[sidealternative].x, Origin.y - OriginLeftRight[sidealternative].y , Origin.z + 90 };
if (penetration::CanHitFloatingPoint(ViewPointAutowallalternative, ViewPointAutowall))
{
if (sidealternative == 0)
{
HitSide1 = true;
FreestandSide[idx] = -1;
//FreestandAngle[pPlayerEntity->EntIndex()] = 90;
}
else if (sidealternative == 1)
{
HitSide2 = true;
FreestandSide[idx] = 1;
//FreestandAngle[pPlayerEntity->EntIndex()] = -90;
}
Autowalled = true;
}
}
}
}
}
}