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

Кто управляет юнитом

Юнит слушается того, кто скомандовал последним. Узнать, кто это сейчас, можно двумя свойствами

тик 0
Связь с юнитом0
тип
Контроль юнита1
типxy
Информация2
=
у
Операция3
=
@counter0number
ктоnullnull
мойnullnull

Два процессора смотрят на одного поли. Верхний командует, нижний только спрашивает — и видит чужую власть со стороны.

sensor кто @unit @controller
op equal мой кто @this

@controller отдаёт блок, который сейчас ведёт юнита. У верхнего процессора мой становится единицей, у нижнего остаётся нулём: кто там — чужой processor1.

Свойство Что отдаёт
@controlled число: кто ведёт по виду — процессор, игрок, приказ
@controller объект: какой именно блок, или сам юнит, если логика им не правит

Числа у @controlled не выдуманные, у них есть имена:

Значение Константа Что это значит
0 никто: юнит живёт своим умом
1 @ctrlProcessor им правит процессор
2 @ctrlPlayer в нём сидит игрок
3 @ctrlCommand ему отдан приказ игроком

Свойства выглядят как два взгляда на одно и то же, но у каждого своя слепая зона — и поэтому в настоящей проверке их берут вместе.

Отсюда обе строки разом, и в таком порядке:

sensor кем @unit @controlled
jump 0 greaterThan кем 1 # занят человеком — не трогаем
sensor кто @unit @controller
jump 0 notEqual кто @this # занят чужим процессором — тоже
тик 0
Связь с юнитом0
тип
Контроль юнита1
типxy
Информация2
=
у
Операция3
=
@counter0number
ктоnullnull
мойnullnull

Здесь командуют оба, и каждый тянет поли в свой угол. Смотрите на мой у обоих: единица достаётся тому, чья команда прошла последней, а юнит болтается между двумя целями.

тик 0
Связь с юнитом0
тип
Прыжок -> 31
если
Контроль юнита2
типxy
Установить3
=
Информация4
=
у
Информация5
=
у
Операция6
=
@counter0number
отдалnullnull
кемnullnull
ктоnullnull
мойnullnull

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

Срок обновляет каждая команда: пока ucontrol зовут в цикле, власть не кончается никогда. Как только звать перестали — шестьсот тиков, и юнит возвращается к себе.

Два случая, когда ucontrol промолчит, сколько его ни зови:

  • юнитом правит игрок. Тот, в ком кто-то сидит, логике не отдаётся вовсе;
  • юниту отдан приказ — тот, что игрок раздаёт выделением и щелчком по карте.

В обоих случаях ubind сработает как обычно и положит юнита в @unit — а вот команды до него не дойдут, и @controller об этом не скажет: он так и будет отдавать самого юнита. Остаётся @controlled: двойка и тройка означают, что юнит занят человеком.

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