Зачем использовать get_tr2(0, TR_vecEndPos, vHitPos) в грабе?

fgd

Сообщения
92
Реакции
25
Помог
12 раз(а)
Здравствуйте!

Я заметил, что в различных реализациях механики захвата (граб) используется функция get_tr2(0, TR_vecEndPos, vHitPos), но не могу понять, зачем она нужна.

У меня есть вопрос по функции get_traceline в контексте механики захвата. Какова роль строки get_tr2(0, TR_vecEndPos, vHitPos)? Зачем в этой функции необходимо использовать get_tr2 для получения информации о столкновении?

Если мы уберем TR_vecEndPos, то сможем получить индекс объекта, с которым произошла трассировка, но не сможем получить координаты точки столкновения. В этом случае, зачем нам нужна эта строка?

Спасибо!
C++:
public PostThink(const id)
{
    static target;


    if(g_DataGrabStatus[id][IS_GRAB])
    {
        static Float: fStartPos[XYZ], Float: fEndPost[XYZ];
      
        get_user_viewofs_origin(id, fStartPos);
        fEndPost = get_my_aim(id, 9999);
        xs_vec_add(fEndPost, fStartPos, fEndPost);
        target = get_traceline(fStartPos, fEndPost, id, fEndPost);
    }
}
stock get_traceline(const Float:fStartPos[XYZ], const Float:fEndPos[XYZ], IGNOREED, Float:vHitPos[XYZ])
{ 
    engfunc(EngFunc_TraceLine, fStartPos, fEndPos, DONT_IGNORE_MONSTERS, IGNOREED, 0);
    get_tr2(0, TR_vecEndPos, vHitPos);
    return get_tr2(0, TR_pHit);
}
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Смотря в какой реализации. Представленный код - полный?

В одной реализации я видел поиск цели для захвата грабом через FindEntInSphere - соответственно её начало на конце трейслайна.
 
  • Нравится
Реакции: fgd

fgd

Сообщения
92
Реакции
25
Помог
12 раз(а)
Последнее редактирование:
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
У меня есть вопрос по функции get_traceline в контексте механики захвата. Какова роль строки get_tr2(0, TR_vecEndPos, vHitPos)? Зачем в этой функции необходимо использовать get_tr2 для получения информации о столкновении?
В данной реализации - точка куда уперься трейс сохраняется, видимо для дистанции и дальнейших манипуляций (можно взять и позицию игрока, но думаю это будет не совсем корректно + для триггеров нужен другой код на позицию).

Если мы уберем TR_vecEndPos, то сможем получить индекс объекта, с которым произошла трассировка, но не сможем получить координаты точки столкновения. В этом случае, зачем нам нужна эта строка?
Если уберем, то все равно сможем получить индекс объекта. Тут дело в том, что оно обратно возвращается в fEndPost, где была вызвана функция.
 
  • Нравится
Реакции: fgd

fgd

Сообщения
92
Реакции
25
Помог
12 раз(а)
fl0wer, Большое спасибо за разъяснения.
 

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

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