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

Lookup

Весь контент игры пронумерован. Lookup превращает номер в объект — и открывает перебор по всему списку

среднийНужно знать: Константы контента, Циклы

Предмет можно назвать константой — @copper, @graphite. Но констант двадцать, и выписывать их по одной в программу утомительно. У игры для этого есть нумерованные списки, и lookup достаёт из них по номеру.

тик 0
Поиск0
= lookup
#
Поиск1
= lookup
#
Поиск2
= lookup
#
Поиск3
= lookup
#
Информация4
=
у
Поиск5
= lookup
#
Установить6
=
Установить7
=
Стоп8
@counter0number
первыйПредметnullnull
первыйЮнитnullnull
перваяЖидкостьnullnull
заГраницейnullnull
номерГрафитаnullnull
обратноnullnull
предметовnullnull
юнитовnullnull
Тип Сколько в игре Нулевой
item 20 @copper
liquid 11 @water
unit 56 @dagger
block 262 @graphite-press
lookup item предмет 0

Первое поле — какой список, второе — куда положить, третье — номер. За границей списка лежит пустота, как и везде.

У каждого списка есть своя встроенная переменная с длиной:

set сколько @itemCount

@itemCount, @liquidCount, @unitCount, @blockCount — четыре числа, и ими же заканчивают перебор. Вписывать 20 вместо @itemCount нельзя: в следующем обновлении предметов станет больше, и программа перестанет видеть новые.

Номер по объекту спрашивают у самого объекта:

sensor номер @graphite @id

Отвечает 3 — графит третий в списке предметов. Обратно lookup item обратно 3 вернёт тот же графит. Это пригождается, когда предмет нужно сохранить числом: в ячейку памяти или во флаг юнита объект не всякий раз положишь, а номер — обычное число.

тик 0
Поиск0
= lookup
#
Информация1
=
у
Прыжок -> 52
если
Установить3
=
Установить4
=
Операция5
=
Прыжок -> 06
если
Печать7
Печать8
Печать9
Вывод печати10
Стоп11
@counter0number
предметnullnull
номерnullnull
сколькоnullnull
лучшееnullnull
чегоnullnull

Главное применение — перебрать весь список. Программа спрашивает склад про каждый предмет по очереди и запоминает, какого больше всех: на табло появится graphite: 60.

lookup item предмет номер
sensor сколько container1 предмет
op add номер номер 1
jump 0 lessThan номер @itemCount

Без lookup пришлось бы выписать двадцать sensor подряд — и переписывать программу после каждого обновления игры.

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

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