Объект в ячейке
Ячейка перестала быть массивом чисел. В неё кладут предмет, склад или юнита — и достают их же
Место в памяти помнит не только значение, но и вид значения. Записали число — лежит число; записали предмет — лежит предмет, а не его номер.
Программа кладёт в ячейку @copper и сам склад, достаёт их обратно и сразу пускает в дело:
прочитанный склад отвечает на sensor, прочитанный предмет годится ему в вопрос.
Что можно положить
Заголовок раздела «Что можно положить»| Что | Пример |
|---|---|
| число | write 120 cell1 0 |
| предмет, жидкость, блок, тип юнита | write @copper cell1 0 |
| здание | write container1 cell1 0 |
| юнит | write @unit cell1 0 |
| строка | write "готово" cell1 0 |
| пустоту | write null cell1 0 |
Прочитанное годится везде, где годился бы оригинал: здание из ячейки можно спросить через
sensor, юниту из ячейки — отдать команду, предмет из ячейки — назвать в вопросе про запас.
Место помнит один вид за раз
Заголовок раздела «Место помнит один вид за раз»Запись не «дописывает» вид к значению — она заменяет содержимое места целиком:
write @copper cell1 0write 7 cell1 0read что cell1 0В что окажется 7. Предмета там больше нет — не «предмет плюс число», а просто число.
Отсюда правило: если в памяти лежит список разного, вид нужно знать заранее. Программа
сама по прочитанному значению не поймёт, число это или юнит; проверить можно только косвенно,
строгим сравнением с null или попыткой спросить у него свойство.
Юнит в памяти — ссылка, а не копия
Заголовок раздела «Юнит в памяти — ссылка, а не копия»Здание и юнит кладутся в память ссылкой на себя. Пока они живы, всё работает; когда погибают, ссылка остаётся, а вот толку от неё нет.
Зачем это на практике
Заголовок раздела «Зачем это на практике»- Очередь целей. Нашли юнита радаром — положили в память; другой процессор взял оттуда и повёл.
- Список складов. Обошли связи через
getlink, сложили в память те, что интересны, и дальше работают с готовым списком, а не перебирают всё заново на каждой итерации. - Один найденный блок на всех. Дорогой поиск делается один раз, результат лежит в ячейке, и остальные процессоры просто читают.
Общая память двух процессоров — тема следующего урока.
Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.