Поворот энтити

Сообщения
192
Реакции
148
Помог
1 раз(а)
Есть код который поворачивает энтити:
Код:
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;
}
Код из Halloween Mod
( Все цифры рандомные, для примера )
Так вот, в некоторых моментах fDiff / fAbs достигают таких цифр 708.969... ( -708.969... ) ( больше +/- 360.0 )
vSubAngles показывает нормальные цифры 330.653... ( -330.653... )
А вот vAngles -130.146... ( 130.146... )

Когда происходит вышеописанное - энтити резко делает оборот в обратную сторону. Как поправить это?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу