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

Предметы: взять и отдать

Юнит — это переносная ячейка склада: один вид предмета, немного мест и обязательная задержка между рейсами

тик 0
Связь с юнитом0
тип
Контроль юнита1
типизпредметкол-во
Информация2
=
у
Информация3
=
у
Информация4
=
у
@counter0number
грузnullnull
чегоnullnull
вСкладеnullnull
ucontrol itemTake container1 @copper 10 0 0

Поли забирает медь из склада: груз растёт, вСкладе убывает. Когда юнит набьётся доверху — а у поли тридцать мест, — взятие перестанет что-либо менять.

Поле itemTake itemDrop
второе откуда брать: здание куда сдавать: здание
третье какой предмет сколько отдать
четвёртое сколько взять

Разница в полях не случайна: брать можно только один вид предмета, и какой — надо сказать; а отдаёт юнит то, что у него есть, — выбирать не из чего.

Только вплотную. Передача работает в радиусе около шести клеток от здания — примерно столько же, сколько игрок может перетащить руками. Юнита сначала подводят move, и только потом командуют передачу.

Не чаще, чем раз в полторы секунды. Между двумя передачами одного юнита проходит 90 тиков. Команда, отданная раньше, просто ничего не сделает: ни ошибки, ни половинной передачи.

Только своё. Чужой склад юниту не отдаст и не примет — команда тихо ничего не сделает.

У юнита, в отличие от склада, одно место под груз: он несёт медь или графит, но не то и другое сразу. Взяли медь, а потом попробовали взять графит — графита не будет.

Свойство Что отдаёт
@totalItems сколько несёт всего
@firstItem что именно несёт: @copper, @graphite или пустота
@itemCapacity сколько влезает: у поли 30, у моно 20, у меги 60
тик 0
Связь с юнитом0
тип
Информация1
=
у
Прыжок -> 62
если
Контроль юнита3
типxy
Контроль юнита4
типизпредметкол-во
Конец5
Контроль юнита6
типxy
Контроль юнита7
типвкол-во
Информация8
=
у
@counter0number
грузnullnull
привезеноnullnull

Вот программа-перевозчик целиком. Она смотрит на груз и решает, куда лететь: пустой — на склад за медью, полный — к получателю.

ubind @poly
sensor груз @unit @totalItems
jump 6 greaterThanEq груз 30
ucontrol move 5 4 0 0 0
ucontrol itemTake container1 @copper 30 0 0
end
ucontrol move 15 4 0 0 0
ucontrol itemDrop container2 30 0 0 0

Три рейса — и девяносто меди переехали во второй склад. Заметьте, что ни within, ни ожидания здесь нет вовсе: команда передачи отдаётся каждую итерацию и срабатывает сама, как только юнит долетит и пройдёт задержка. Такой перевозчик короче и надёжнее, чем программа, которая честно ждёт прибытия.

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