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

Свойство есть не у каждого

Почему @ammo есть только у турели, а @progress — у бура, и чем тип блока отличается от здания

Свойств 77, но ни у кого нет всех сразу. Это не ограничение логики, а устройство игры: свойство читает код конкретного класса, и @ammo написан в турели, @progress — в буре и фабрике, @memoryCapacity — в ячейке памяти. У остальных этого кода просто нет.

тик 0
Информация0
=
у
Информация1
=
у
Информация2
=
у
Информация3
=
у
@counter0number
полноеnullnull
текущееnullnull
памятьЯчейкиnullnull
памятьМаршрутаnullnull

Здесь двойная турель подбита до 120 из 250, а память есть у ячейки и нет у маршрутизатора.

Что тип и здание — разные собеседники, уже сказано в уроке «Свойства зданий»: @duo это чертёж, duo1 — турель на карте. Первые две строки примера спрашивают у них одно и то же и получают разное: 250 здоровья у чертежа против 120 у подбитой турели.

Дальше начинается то, чего у здания нет вовсе: у типа есть @id и @name, а ещё цена.

Запросите у типа не свойство, а предмет, и получите стоимость постройки: у @duo меди 35, у @vault титана 250. Тот же вопрос к зданию означает «сколько его внутри», а к типу — «сколько он стоит». Из логики цену больше узнать нечем; в режиме бесконечных ресурсов она обнуляется.

Общее для всех зданий — здоровье, координаты, команда, размер, содержимое. Дальше начинается частное:

Свойство У кого
@ammo, @ammoCapacity, @currentAmmoType турели, 26 блоков
@progress всё, что делает работу за время: буры, фабрики, стройка
@heat реакторы, нагреватели, проектор щита, энергетические турели — 25 блоков
@memoryCapacity ячейка и блок памяти, а у мирового процессора ещё мировая ячейка
@displayWidth, @displayHeight дисплеи
@totalLiquids у фабрики — только её выходная жидкость, у насоса — только та, что он качает

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

Никакой ошибки не будет: sensor не жалуется, а кладёт null. Программа продолжит работать.

@controlled отвечает числом — 0, 1, 2 или 3, — но это не величина, а код: никто, процессор, игрок, режим командования.

Ноль здесь стоит не случайно: всё, что больше нуля, означает «кем-то управляется». Поэтому самая частая проверка — не перебор кодов, а сравнение с нулём, и jump умеет тут и «больше», и «не равно».

Различать, кто именно, приходится реже; для этого у кодов есть имена-константы — @ctrlProcessor, @ctrlPlayer, @ctrlCommand. Это те же самые 1, 2 и 3. Коды целиком — в таблице свойств.

Одного @controlled для юнитов обычно мало: он говорит «какой-то процессор», но не говорит какой. Пара к нему — @controller, и у каждого своя слепая зона; подробно об этом в уроке «Кто управляет юнитом».

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