Никогда не знаешь, когда какой кусок информации пригодится...

Сидел, тупил над программированием пилотов-андроидов.
Да, в NebuLeet.
Нет, у меня нет проблем, почему вы спрашиваете?

С пушками всё просто: есть враг в секторе обстрела на подходящей дальности - стрелять, иначе не стрелять.
Благо, для вычисления угла между вектором движения корабля и вектором направления на цель нашлась практически готовая функция, требующая только указания, что в какую сторону меряем.

А с собственно манёврами корпусом вышел затык.

Сначала мозг мой не выродил ничего лучше, чем "подлететь к цели вплотную, точка".
В результате бедный пилот на дальности штыкового боя огребал раз за разом от всего, что только было в бою.
И отстреливаться нормально не мог потому, что разворот - не мгновенный процесс.
А у большинства пушек сектор обстрела не на 360 градусов.

"Подлететь к цели на расстояние 100 метров, точка" оказалось ненамного лучше.
Урон в секунду ненамного вырос - выживаемость всё ещё на нуле.

На втором часу экспериментов на перекуре я вспомнил почему-то, как когда-то давным-давно участвовал аж в пре-альфа-тесте World of Warplanes.
Там тогда было всего три самолёта и не было "потолка" по высоте.
Good times...

Так вот, мой усталый мозг вцепился в это воспоминание и раскручивал его до тех пор, пока не докопался до самолётчицкого термина "бум-зум".

Полноценное пике в 2D игре сделать, конечно, нельзя.
А вот скрипт
"Пока дальность до цели более 100 метров - пытаться подлететь вплотную к цели,
иначе ПОЛНЫЙ ВПЕРЁД!!!"
оказался, во-первых, более простым для калдыринга во внутриигровом редакторе, чем я думал.
Во-вторых, эффективным как против сопоставимо быстрых целей, так и против неповоротливых медлительных потому, что мой корабль оказывается постоянно в движении, что вынуждает вражеских пилотов постоянно прицеливаться заново, а не расстреливать стоячую мишень.
В-третьих, естественным путём уменьшился процент собранных задом самонаводящихся ракет. Тупо не догоняют.

Проблем также прибавилось.
1. Количество собранных лбом снарядов от слишком поворотливых целей всё ещё слишком велико.
2. Миссии типа "все против всех" - это влёт в кучу и выхватывание люлей вообще ото всех участвующих в перестрелке в куче.
3. Не знаю, баг или фича, но если андроид вылетит за край карты - он не вернётся в бой, а попытается убежать с арены. Хотя по факту программа должна заставлять его вернуться. И это случается, внезапно, чаще ожидаемого, особенно с достаточно быстрыми кораблями.

Т. е. в следующей итерации надо как-то ухитриться заколхозить сразу два условия для построения траектории подлёта и атаки, чтобы хотя бы частично исключить всю эту шнягу.

1. Заход на цель до, скажем, 150 метров производится по сходящейся спирали,
затем рывок прямо на цель до отметки 100 метров,
затем (куда бы цель ни летела, как в предыдущей итерации) - ПОЛНЫЙ ВПЕРЁД! пока не удалимся на 100 метров от цели.
Смыть, повторить.

2. При удалении от центра арены (а они круглые) на расстояние на грани расстояния попытки сбежать - вместо спирали вокруг цели из первого пункта, лететь по кругу (ergo, не меняя радиуса) вокруг центра арены в ту же сторону.
До тех пор, пока спираль из первого пункта не начнёт нас вести снова внутрь арены, ога.

Я понимаю алгоритмику.
Я понимаю, как эту алгоритмику потом перенести на язык внутриигрового программирования (который, сукидла, умеет GOTO, но не умеет IF, вернее вместо полноценного IF у него переключение между тремя потоками по условию, из которого МОЖНО закалдырить IF'ообразное - но об этом лучше в другой раз...)

Но я АБСОЛЮТНО не понимаю планиметрию.
Я синус от косинуса не отличу.
Если передо мной положить книгу, открытую на определениях синуса и косинуса, - я вместо них увижу пустую страницу.
Мозг не воспринимает.
Даже если понятия синуса и косинуса будут объяснены обучающим комиксом с Оленёшей.
А если кто-то даст мне готовые для переноса в скрипты формулы - скорее всего, я от их прочтения просто выпаду в биологический BSOD и усну на какое-то время.
И это, наверное, не лечится.

Казалось бы, ну забей на андроидов, юзай живых пилотов, раз не дано.

Но они ТУПЫЫЫЫЫЕЕЕЕЕЕЕ!
Меня жаба душит качать им Интеллект - а с 1-2 Интеллекта поведение у них просто доводит до кипящих слёз!

Я не могу смотреть, как ракетная канонерка при влёте на арену даёт приветственный залп в пустоту.
Из самой технологичной из доступных ракетницы, у которой боекомплект всего 12 выстрелов.
Это чудовищно растратно...

Как потом пилот на быстром истребителе ближнего боя стоит и С ЛЮБОПЫТСТВОМ смотрит, как эту медленно убегающую канонерку медленно разбирают на части.

И как этот истребитель потом в погоне за последним выжившим пиратом оттормаживается специально, чтобы этот пират, которого любое попадание добьёт, мог улететь восвояси.

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

Мдээээээээээээ, это не в Factorio:SA Глебу копать...