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

Объект в ячейке

Ячейка перестала быть массивом чисел. В неё кладут предмет, склад или юнита — и достают их же

Место в памяти помнит не только значение, но и вид значения. Записали число — лежит число; записали предмет — лежит предмет, а не его номер.

тик 0
Ввод0
Ввод1
Чтение2
=
Чтение3
=
Информация4
=
у
Печать5
Печать6
Печать7
Вывод печати8
@counter0number
предметnullnull
складnullnull
сколькоnullnull

Программа кладёт в ячейку @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 0
write 7 cell1 0
read что cell1 0

В что окажется 7. Предмета там больше нет — не «предмет плюс число», а просто число.

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

Здание и юнит кладутся в память ссылкой на себя. Пока они живы, всё работает; когда погибают, ссылка остаётся, а вот толку от неё нет.

  • Очередь целей. Нашли юнита радаром — положили в память; другой процессор взял оттуда и повёл.
  • Список складов. Обошли связи через getlink, сложили в память те, что интересны, и дальше работают с готовым списком, а не перебирают всё заново на каждой итерации.
  • Один найденный блок на всех. Дорогой поиск делается один раз, результат лежит в ячейке, и остальные процессоры просто читают.

Общая память двух процессоров — тема следующего урока.

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