Перейти к содержимому

Прибытие: within

Юнит никогда не встанет ровно в точку. Спрашивать надо не «там ли он», а «близко ли»

тик 0
Связь с юнитом0
тип
Контроль юнита1
типxy
Контроль юнита2
типxyрадиусрезультат
Информация3
=
у
@counter0number
прибылnullnull
xnullnull
ucontrol move 16 4 0 0 0
ucontrol within 16 4 2 прибыл 0

Пока поли летит, прибыл равен нулю; когда он подходит ближе двух клеток к цели — единице. Обратите внимание на x: юнит встал около 15.87, а не на шестнадцати ровно.

Поле Что в нём
первое within
второе и третье точка в клетках
четвёртое радиус, тоже в клетках
пятое куда положить ответ: 1 или 0

within ничего не делает с юнитом: он только отвечает. Управления он поэтому не берёт — юнит, которым никто не командовал, от одного within под контроль не попадёт. Так же ведёт себя unbind.

А вот уже начатое управление within продлевает: если юниту до этого скомандовали, каждый вопрос обновляет десятисекундный срок наравне с командами.

ucontrol move 16 4 0 0 0
ucontrol within 16 4 2 прибыл 0
jump 0 equal прибыл 0

Здесь move повторяется вместе с проверкой, и это правильный вид ожидания: команда не даёт юниту сбиться с пути, а не только держит срок.

Радиус Когда
1–2 клетки обычное «долетел»
3–5 клеток пересадка на следующую точку маршрута, где точность не нужна
дальность передачи перед itemTake и itemDrop: туда юниту надо подойти вплотную

Слишком маленький радиус — и юнит будет вечно «почти на месте»: инерция не даст ему остановиться в полуклетке от цели. Слишком большой — и программа решит, что он прибыл, когда до склада ещё лететь.

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.