Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Определение зоны видимости

Определение зоны видимости

Поделиться
tonline_kms65Пользовательwww17 апр. 201713:44#0
Всем здравствуйте.
У меня есть такой вопрос, который пока не представляю, как решить. Нужна ваша помощь.
Язык скриптовый. SourcePawn (не объектно-ориентированный), разновидность Pawn, функции atan и atan2 я не нахожу. Хотя они естественно есть.

Суть вопроса такая:
Создана ENT(сущность Дрон), вооруженная самонаводящимися ракетами. После запуска ракет, ракета начинает поиск ближайшего, видимого противника.
Сам поиск противника построен по такой схеме - после запуска ракеты циклом нахожу все ENT(с нужным класснеймом, у меня "player"), неважно видимые или скрытые за препятствиями. Т.е. все противники найдены. Теперь трассировкой нахожу ближайшего видимого(не скрытого за препятствием) противника, начальная точка есть (ракета), конечная (противник) тоже есть. Если до момента попадания в противника, его кто то "грохнул" - ракета продолжает движение прямо, пока не будет найден следующий противник (или пока не истечет время жизни этой ракеты).
Вроде всё хорошо, все нормально. Есть одно НО. Противник может появиться не только спереди, он может появиться сзади, слева или справа, более угла 90 градусов (т.е. уже сзади). Естественно ракета резко меняет направление, и если она не успела улететь подальше от самого Дрона, то она просто ударяется в этого Дрона (своего родителя) и взрывается. Естественно наносит ущерб Дрону, да и ракета теряется впустую.

Теперь и сам вопрос - как ограничить трассировку видом только вперед, ограничить углом ~90 градусов? У кого какие мысли есть отпишитесь пожалуйста, а то у меня что то мозги не работают. Возможно сам алгоритм поиска противников у меня неверный. Код не нужен - нужны мысли.

Прошу прощения не 90 градусов а 180.

Для примера видео - на нем видно, как ракета может лететь в какую угодно сторону за противником.

или здесь

Я прихожу к выводу, что дело все-таки не в самой трассировке, а в получении ID игроков, видимо моя ошибка в том, что я получаю сразу всех живых игроков. А нужно получить ID только тех игроков, которые да данный момент, находятся спереди ракеты.

Я могу получить текущее направление "взгляда" (вектор) ракеты, я могу получить точные координаты игроков. Но я не могу сообразить - как определить что те или иные игроки находятся сзади ракеты. Они ведь могут точно также находиться в пределах 90 градусов, но сзади. Чистая математика, а я в ней не силен.

Что то есть похожее здесь, но мне не всё понятно, опять-же в силу моего слабого знания математики.
Пытался его предложение

+ Показать
  переделать под себя:
+ Показать

Ну и естественно - это не то пальто. Что бы что то сделать, нужно знать что делаешь, я пытался делать методом "тыка".

Правка: 25 апр. 2017 6:41

/ Форум / Программирование игр / Игровая логика и ИИ

2001—2017 © GameDev.ru — Разработка игр