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

Get Link

У связей есть порядок, и по нему их можно обойти — не зная заранее, что подключено

простоНужно знать: Связи и getlink, Циклы

Связь можно назвать по имени — cell1, duo1, — а можно взять по номеру. Номер это порядок подключения: первый подключённый блок нулевой, второй первый и так далее.

тик 0
Получить связь0
=
Печать1
Печать2
Операция3
=
Прыжок -> 04
если
Вывод печати5
Стоп6
@counter0number
блокnullnull
номерnullnull

Программа обходит все связи и печатает, что нашла: container memory-cell message. Имён блоков она при этом не знает и знать не обязана.

getlink блок номер
op add номер номер 1
jump 0 lessThan номер @links

@links — встроенная переменная процессора: число подключённых блоков. Именно ей заканчивают цикл, а не числом: подключили ещё один блок — программа сама его увидит.

тик 0
Установить0
=
Получить связь1
=
Получить связь2
=
Получить связь3
=
Получить связь4
=
Стоп5
@counter0number
сколькоnullnull
первыйnullnull
второйnullnull
третийnullnull
дробныйnullnull
Номер Что вернёт
0 и 1 подключённые блоки
2 при двух связях null
1.9 связь номер 1: дробная часть отбрасывается

Ошибки за границей нет — как и у памяти, ответом будет пустота.

  • Одна программа на разные базы. Подключили шесть буров вместо трёх — цикл сам обойдёт шесть.
  • Поиск нужного блока. Обходим связи, спрашиваем @type или sensor, находим тот, что искали.
  • Обход однотипных блоков. Выключить все турели, опросить все склады, собрать сумму меди по всем контейнерам.
getlink блок номер
sensor тип блок @type
jump 7 notEqual тип @container
sensor меди блок @copper
op add всего всего меди

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