Стены (Браш)

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Всем здравствуйте.
Такой вопрос - на карте есть точка(не ENT!) с координатами, делаю трассировку до этой точки, точка перекрыта стеной (не ENT! именно стеной, брашем). Проблема в том что у меня "просвечивает стены"
no_brush.jpg
Есть id ENT, есть её координаты откуда делаю начало трассировки, есть углы ENT, есть вектор направления и есть конечная точка. Вроде есть всё.

Сам вопрос - если точка перекрыта стеной, как это определить?
У меня была мысль такая:
1. делаю вектор от координат ENT до координат точки. Не трассировкой! Просто создаю вектор.
2. делаю трассировку, так же от ENT, в направлении точки, если на пути будет стена, будет конечная точка №2 со своими координатами.
3. сравниваю длины векторов, если не равны значит есть препятствие.

Но это моя мысль. Может быть есть более простые и дельные мысли?
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
может просто задействовать TR_GetEntityIndex в случае энтити?
Return Value
Entity index or -1 for no collision.
Достаточно сравнить полученый индекс с требуемым.

Или TR_GetEndPosition в случае точки?
Просто сравниваешь полученные координаты с требуемыми.

Ну и используешь при трассировке MASK_SHOT для проверки проходит ли пуля
Для лазеров можно задействовать MASK_VISIBLE_AND_NPCS (если луч не проходит сквозь NPC) или же CONTENTS_SOLID|CONTENTS_MOVEABLE чтобы луч проходил через все нематериальные предметы (а также стёкла и решётки)
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
@Grey83,
Координаты Дрона dron_pos
Ближайшая к Дрону точка(вейпоинт) target

Трассировка:
C-подобный:
//****************
TR_TraceHullFilter(dron_pos, target, MinNadeHull, MaxNadeHull, MASK_SOLID, Filter, ent);
float aim_pos[3];
if(TR_DidHit(INVALID_HANDLE)) TR_GetEndPosition(aim_pos, INVALID_HANDLE);
PrintToChatAll("%f %f %f / %f %f %f", aim_pos[0], aim_pos[1], aim_pos[2], target[0], target[1], target[2]);
//****************

Фильтр:
C-подобный:
//------------------------------------------------------------------------------
public bool:Filter(entity, contentsMask, any:ent){                  
if (entity != ent) return true;
return false;    // не проверять на столкновение
}

Вот что получается в результате "напряженной, кропотливой работы":
C-подобный:
1447.240478 1475.328125 1.479472 / 1420.490234 1415.938598 1.437384
1447.117065 1475.115722 1.397453 / 1420.490234 1415.938598 1.437384
1446.986572 1474.791015 1.402448 / 1420.490234 1415.938598 1.437384
1446.860351 1474.596801 1.421723 / 1420.490234 1415.938598 1.437384
1446.744018 1474.310791 1.380146 / 1420.490234 1415.938598 1.437384
1446.608886 1473.991943 1.362637 / 1420.490234 1415.938598 1.437384
1446.532714 1473.849853 1.357321 / 1420.490234 1415.938598 1.437384
1446.440795 1473.638305 1.397639 / 1420.490234 1415.938598 1.437384
1446.377197 1473.455444 1.386372 / 1420.490234 1415.938598 1.437384
1446.273193 1473.238647 1.371932 / 1420.490234 1415.938598 1.437384
1446.208862 1473.091796 1.397134 / 1420.490234 1415.938598 1.437384
1446.094970 1472.854736 1.364326 / 1420.490234 1415.938598 1.437384
1446.028686 1472.715454 1.384556 / 1420.490234 1415.938598 1.437384
1445.914794 1472.488281 1.343755 / 1420.490234 1415.938598 1.437384
1445.854492 1472.366821 1.379079 / 1420.490234 1415.938598 1.437384
1445.721435 1472.053222 1.409348 / 1420.490234 1415.938598 1.437384
1445.629272 1471.894531 1.356943 / 1420.490234 1415.938598 1.437384
1445.470336 1471.590820 1.442526 / 1420.490234 1415.938598 1.437384
1445.345703 1471.367431 1.416963 / 1420.490234 1415.938598 1.437384
1445.210205 1470.987426 1.422969 / 1420.490234 1415.938598 1.437384
1445.098999 1470.803833 1.349017 / 1420.490234 1415.938598 1.437384
1444.955322 1470.502807 1.343627 / 1420.490234 1415.938598 1.437384
x y z полученные трассировкой координаты / исходные координаты .
Не хотят сходиться точки. Что то я не так делаю, где то уже совсем рядом, но не могу понять где моя ошибка. Видно что координаты от трассировки изменяются, но меняться они ведь не должны.
Дрон двигается, двигается к точке, трассировкой координаты получены, почему они меняются? Такое чувство, что дистанцию мерит.
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
может это потому что ты используешь TR_TraceHullFilter, а не TR_TraceRayFilter?
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
--- Добавлено позже ---
Немного боевых действий Дрона, по детски конечно, но начало есть. . Описание в видео.
 
Последнее редактирование:
Сверху Снизу