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

Связи и getlink

Связь — не соседство: блок надо подключить, и только тогда у него появится имя

Процессор не видит блоков вокруг себя. Контейнер, приставленный вплотную, для программы не существует — ровно так же, как контейнер на другом конце базы.

Чтобы блок появился в программе, его подключают: щёлкнуть по процессору, потом по блоку. Вокруг процессора при этом рисуется круг — это его дальность, дальше подключать некуда. Повторный щелчок по подключённому блоку связь снимает.

Процессор Дальность
микропроцессор 10 тайлов
логический процессор 22 тайла
гиперпроцессор 42 тайла

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

Подключённый блок получает имя вида container1, cell1, display1. Собирается оно из имени блока: берётся последняя часть через дефис, а номер — первый свободный, начиная с единицы.

Блок Имя связи
container container1
memory-cell cell1
power-node node1
titanium-conveyor conveyor1
large-logic-display display1
power-node-large node1
metal-wall-2 wall1

Последние две строки — особый случай: если имя блока кончается на large или на число, игра берёт часть перед ним. Поэтому большой силовой узел — тоже node, а не large.

Номер — первый свободный, а не следующий: если снять связь с container1, а потом подключить другой контейнер, он снова станет container1.

Имена удобны, пока связей три. Когда их полтора десятка и они меняются, программе нужен перебор — для этого есть @links и getlink.

  • @links — сколько связей у процессора прямо сейчас, число.
  • getlink — здание по номеру, начиная с нуля. Номер вне диапазона даёт null.
тик 0
Установить0
=
Получить связь1
=
Получить связь2
=
Получить связь3
=
Информация4
=
у
@counter0number
сколькоnullnull
первыйnullnull
второйnullnull
третийnullnull
медьnullnull

Нажмите «шаг» пять раз. В примере подключены два блока — контейнер и ячейка памяти, — поэтому сколько станет двойкой, первый окажется container1, второйcell1, а третий останется пустым: связи с номером 2 нет, а ошибки в mlog не бывает.

Обратите внимание на столбец типа в таблице: у первый и второй там building — это не число и не текст, а сам блок. С таким значением работает sensor, которому всё равно, пришло ли оно из имени связи или из getlink.

Блок снесли — связь становится недействительной, @links уменьшается, а sensor по имени начинает отвечать null. Программа при этом продолжает работать как ни в чём не бывало: проверять, не пропал ли блок, — ваша забота.

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

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