Свойство есть не у каждого
Почему @ammo есть только у турели, а @progress — у бура, и чем тип блока отличается от здания
Свойств 77, но ни у кого нет всех сразу. Это не ограничение логики, а устройство игры:
свойство читает код конкретного класса, и @ammo написан в турели, @progress — в буре
и фабрике, @memoryCapacity — в ячейке памяти. У остальных этого кода просто нет.
Здесь двойная турель подбита до 120 из 250, а память есть у ячейки и нет у маршрутизатора.
У типа спрашивают про цену
Заголовок раздела «У типа спрашивают про цену»Что тип и здание — разные собеседники, уже сказано в уроке
«Свойства зданий»: @duo это чертёж, duo1 — турель
на карте. Первые две строки примера спрашивают у них одно и то же и получают разное:
250 здоровья у чертежа против 120 у подбитой турели.
Дальше начинается то, чего у здания нет вовсе: у типа есть @id и @name, а ещё цена.
Запросите у типа не свойство, а предмет, и получите стоимость постройки: у @duo меди 35,
у @vault титана 250. Тот же вопрос к зданию означает «сколько его внутри», а к типу —
«сколько он стоит». Из логики цену больше узнать нечем; в режиме бесконечных ресурсов
она обнуляется.
Кто на что отвечает
Заголовок раздела «Кто на что отвечает»Общее для всех зданий — здоровье, координаты, команда, размер, содержимое. Дальше начинается частное:
| Свойство | У кого |
|---|---|
@ammo, @ammoCapacity, @currentAmmoType |
турели, 26 блоков |
@progress |
всё, что делает работу за время: буры, фабрики, стройка |
@heat |
реакторы, нагреватели, проектор щита, энергетические турели — 25 блоков |
@memoryCapacity |
ячейка и блок памяти, а у мирового процессора ещё мировая ячейка |
@displayWidth, @displayHeight |
дисплеи |
@totalLiquids |
у фабрики — только её выходная жидкость, у насоса — только та, что он качает |
Полный список, свойство за свойством, — в таблице свойств: у каждого написано, у кого оно читается и что отдаёт. Эта таблица снята из кода игры, а не составлена вручную, поэтому ей можно верить.
Что делать с ответом null
Заголовок раздела «Что делать с ответом null»Никакой ошибки не будет: 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.