C++:
inline float ClampYaw(float yaw)
{
while (yaw > 180.f)
yaw -= 360.f;
while (yaw < -180.f)
yaw += 360.f;
return yaw;
}
float __fastcall AngleDiff(float a1, float a2)
{
float val = fmodf(a1 - a2, 360.0);
while (val < -180.0f) val += 360.0f;
while (val > 180.0f) val -= 360.0f;
return val;
}
void Resolver::Skeet(C_BaseEntity* pEnt)
{
for (int i = 1; i <= g_pGlobalVars->maxClients; i++)
{
C_BaseEntity* entity = g_pEntityList->GetClientEntity(i);
auto animState = pEnt->AnimState();
if (!entity ||
entity->GetTeam() ||
!entity->IsAlive())
continue;
auto v3 = entity->AnimStatev2(); //animstate
auto v1 = entity->GetEyeAngles(); //current angles
auto v8 = animState->m_flCurrentFeetYaw; //currentfeet
auto v6 = v3->pad10[516]; //maxrotqation
auto v12 = entity->GetVelocity().Length2D(); //velocity
auto delta = AngleDiff(v1.y, v8);
if (delta <= v6) {
if (delta < 35.f && delta > -35) {
if (v12 > 0.1f)
entity->GetEyeAnglesPointer()->y = entity->GetLowerBodyYaw();
continue;
}
else if (delta > 35.f) {
if (v1.y < 0.f && v1.y > -180.f)
entity->GetEyeAnglesPointer()->y = ClampYaw(v1.y + delta);
else if (v1.y > 0.f && v1.y < 180.f)
entity->GetEyeAnglesPointer()->y = ClampYaw(v1.y - delta);
}
else if (delta < -35.f) {
if (v1.y < 0.f && v1.y > -180.f)
entity->GetEyeAnglesPointer()->y = ClampYaw(v1.y - delta);
else if (v1.y > 0.f && v1.y < 180.f)
entity->GetEyeAnglesPointer()->y = ClampYaw(v1.y + delta);
}
}
}
}
not the best, just something i found on blooms.pw source