Есть код который поворачивает энтити:
Код из Halloween Mod
( Все цифры рандомные, для примера )
Так вот, в некоторых моментах fDiff / fAbs достигают таких цифр 708.969... ( -708.969... ) ( больше +/- 360.0 )
vSubAngles показывает нормальные цифры 330.653... ( -330.653... )
А вот vAngles -130.146... ( 130.146... )
Когда происходит вышеописанное - энтити резко делает оборот в обратную сторону. Как поправить это?
Код:
stock bool:UTIL_TurnTo(ent, const Float:vTarget[3], const bool:lockAxis[3] = {true, false, false}, const Float:fMaxAngle = -1.0)
{
//Get user origin
new Float:vOrigin[3];
pev(ent, pev_origin, vOrigin);
new Float:vAngles[3];
pev(ent, pev_angles, vAngles);
static Float:vDiffAngles[3];
{
static Float:vSub[3];
xs_vec_sub(vTarget, vOrigin, vSub);
static Float:vSubAngles[3];
engfunc(EngFunc_VecToAngles, vSub, vSubAngles);
for (new i = 0; i < 3; ++i) {
if (lockAxis[i]) {
vDiffAngles[i] = 0.0;
continue;
}
new Float:fDiff = vSubAngles[i] - vAngles[i];
new direction = fDiff > 0 ? 1 : -1;
new Float:fAbs = fDiff * direction;
if (fAbs > 180.0) {
vDiffAngles[i] = (180.0 - (fAbs - 180.0)) * -direction;
} else {
vDiffAngles[i] = fDiff;
}
}
}
new bool:turnResult = true;
if (fMaxAngle >= 0.0) {
new Float:fAngle = xs_vec_len(vDiffAngles);
if (fAngle > fMaxAngle) {
xs_vec_normalize(vDiffAngles, vDiffAngles);
xs_vec_mul_scalar(vDiffAngles, fMaxAngle, vDiffAngles);
turnResult = false;
}
}
xs_vec_add(vAngles, vDiffAngles, vAngles);
//Apply new angles
set_pev(ent, pev_angles, vAngles);
set_pev(ent, pev_v_angle, vAngles);
return turnResult;
}
Так вот, в некоторых моментах fDiff / fAbs достигают таких цифр 708.969... ( -708.969... ) ( больше +/- 360.0 )
vSubAngles показывает нормальные цифры 330.653... ( -330.653... )
А вот vAngles -130.146... ( 130.146... )
Когда происходит вышеописанное - энтити резко делает оборот в обратную сторону. Как поправить это?