Исходник Dynamic Multipoint

Забаненный
Статус
Оффлайн
Регистрация
24 Мар 2017
Сообщения
699
Реакции[?]
205
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Official
Rewriting my internal project from scratch I stumbled across this really, really old peace of code I have written. It has multiple flaws, it does not account for box shaped hitboxes and is rather slow, since all points are generated in world space (and have to be generated again every tick) as well as really dumb way of rotating the points. It is not the end of the world though, but if you applied some optimizations and account for feet being boxes, you should be fine. Also, you can easily add pointscale to this as well.

translate.google
Переписывая свой внутренний проект с нуля, я наткнулся на этот действительно, действительно старый мир кода, который я написал. Он имеет несколько недостатков, он не учитывает коробчатые хиты и довольно медленный, поскольку все точки генерируются в мировом пространстве (и их нужно генерировать снова каждый тик), а также действительно тупой способ поворота точек. Это еще не конец света, но если вы применяете некоторые оптимизации и учитываете, что ноги являются ящиками, вы должны быть в порядке. Кроме того, вы можете легко добавить pointcale к этому.
Код:
Vector multipoints[128];
int multipointCount = 0;
 
void DoMultipoint(C_BasePlayer* player, matrix3x4_t matrix, mstudiobbox_t* hitbox, int densityX, int densityY)
{
 
    multipointCount = 0;
 
    if (!hitbox || !player)
        return;
 
    Vector lCenter, lPoint, dir, head2D;
 
    lCenter = (hitbox->bbmin + hitbox->bbmax) * 0.5f;
    Math::VectorTransform(lCenter, matrix, multipoints[multipointCount++]);
 
    if (densityX >= 0)
    {
        lCenter = hitbox->bbmin - (hitbox->bbmax - hitbox->bbmin).Normalized() * 0.95f * hitbox->m_flRadius;
        Math::VectorTransform(lCenter, matrix, multipoints[multipointCount++]);
 
        lCenter = hitbox->bbmax + (hitbox->bbmax - hitbox->bbmin).Normalized() * 0.95f * hitbox->m_flRadius;
        Math::VectorTransform(lCenter, matrix, multipoints[multipointCount++]);
    }
 
    QAngle dAngle, angle;
    Math::VectorAngles((hitbox->bbmax - hitbox->bbmin).Normalized(), dAngle);
    dAngle += QAngle(0, 90, 0);
 
    if (densityX >= 0 && densityY > 1)
    {
        for (float p = densityX > 1 ? 0 : 0.5f; p <= 1.0f; p += densityX > 1 ? 1.0f / (densityX - 1) : 2) {
            lCenter = hitbox->bbmin + (hitbox->bbmax - hitbox->bbmin) * p;
            for (int o = 0; o < densityY; o++) {
                lPoint = lCenter;
                angle = dAngle + QAngle(360.0f / densityY, 0, 0) * o;
                Math::AngleVectors(angle, dir);
                lPoint += dir.Normalized() * hitbox->m_flRadius * 0.95f;
                Math::VectorTransform(lPoint, matrix, multipoints[multipointCount++]);
            }
        }
    }
}
Credits
@
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
24 Мар 2017
Сообщения
699
Реакции[?]
205
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу