Build Craft/Гейты
Гейты — это трубные логистические элементы, выполняющие определённое действие при выполнении различных условий. Набор возможных условий может меняться в зависимости от того, к чему присоединена труба. Изготавливаются в сборочном столе. Гейт можно снять с трубы, нажав ⇧ Shift+ПКМ.
Содержание
Сборка
Ингредиенты | Крафт | Результат | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Чип из красного камня |
|
Гейт из красного камня | ||||||||||||||||
Железный чип, Красный провод |
|
Железный гейт | ||||||||||||||||
Золотой чип, Красный провод, Синий провод |
|
Золотой гейт | ||||||||||||||||
Алмазный чип, Красный провод, Синий провод, Жёлтый провод, Зелёный провод |
|
Алмазный гейт | ||||||||||||||||
Любой непульсирующий гейт, Железный чип, Пульсирующий чип |
|
Пульсирующий гейт того же уровня и логики. |
Интерфейсы
Гейт из красного камня
GUI самого простого гейта выглядит так.
- Это условие.
- Обозначает, выполнено ли данное условие.
- Действие, которое будет выполнять гейт, если условие выполнено.
Условия и действия выбираются с помощью нажатий на слотах ПКМ или ЛКМ.
Виды условий | ||
---|---|---|
Название | Иконка | Описание |
Pipe Empty | Срабатывает, если по участку трубы, на котором установлен гейт, ничего не передаётся. | |
Items Traversing | Срабатывает, если по участку трубы, на котором установлен гейт, транспортируется предмет. Условие доступно только у труб для предметов. | |
Liquid Traversing | Срабатывает если по участку трубы, на котором установлен гейт, транспортируется жидкость. Условие доступно только у труб для жидкостей. | |
Power Traversing | Срабатывает, если по участку трубы, на котором установлен гейт, передаётся энергия. Условие доступно только у труб для энергии. | |
Redstone Signal On | Срабатывает, если на гейт подаётся сигнал красного камня. | |
Redstone Signal Off | Срабатывает, если на гейт не подаётся сигнал красного камня. | |
Inventory Empty | Срабатывает, если на соседних блоках (сверху, снизу или сбоку от гейта) есть пустой сундук или устройство с пустым инвентарём. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Items in Inventory | Срабатывает, если на соседних блоках есть сундук или устройство с предметами в инвентаре. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Space in Inventory | Срабатывает, если на соседних блоках есть сундук или устройство со свободными слотами в инвентаре. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Inventory Full | Срабатывает, если на соседних блоках есть сундук или устройство с полностью заполненным инвентарём. Условие доступно, только если на соседних блоках есть сундук или устройство с инвентарём. | |
Tank Empty | Срабатывает, если на соседних блоках есть пустая цистерна или устройство с пустой ёмкостью для жидкостей. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Liquid in Tank | Срабатывает, если на соседних блоках есть цистерна или устройство с залитой жидкостью. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Space for Liquid | Срабатывает, если на соседних блоках есть цистерна или устройство со свободным местом для жидкости. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Tank Full | Срабатывает, если на соседних блоках есть цистерна или устройство с полностью залитой ёмкостью для жидкостей. Условие доступно, только если на соседних блоках есть цистерна или устройство с ёмкостью для жидкостей. | |
Engine Stage | Срабатывает, если на соседних блоках есть двигатель с таким же цветом нагрева. Условие доступно, только если на соседних блоках есть двигатель. | |
Capacitor Empty | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c разряженным аккумулятором. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Capacitor Has Energy | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c энергией в аккумуляторе. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Space For Energy | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c аккумулятором, который можно зарядить. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Capacitor Full | Срабатывает, если на соседних блоках есть электрическое устройство IC2 c полностью заряженным аккумулятором. Условие доступно, только если на соседних блоках есть электрическое устройство IC2. | |
Виды действий | ||
Redstone Signal | При выполнении условия гейт светится красным цветом и генерирует сигнал красного камня. |
Но условия вовсе не ограничиваются вышеперечисленными. Другие моды могут добавлять для своих устройств новые условия. И если рядом с гейтом будет находиться такое устройство, то можно будет выбрать это условие.
Железный гейт
В интерфейсе железного гейта можно задать 2 условия. Также железные гейты имеют тип И или ИЛИ. В первом случае действие сработает, только если будут выполнены все условия с такими же действиями. Во втором случае достаточно исполнения любого условия.
Условия и действия железного гейта такие же, как и у предыдущего, но добавляются несколько дополнительных для красного провода.
Золотой гейт
В интерфейсе золотого гейта 4 условия. Золотые, как и железные, имеют тип И или ИЛИ.
Дополнительно у золотых гейтов есть вторичные параметры условий. По умолчанию они не определены и перечёркнуты. Они становятся доступны для некоторых условий с инвентарём, тогда можно добавить тип предмета, или для условий с цистерной, тогда можно добавить тип жидкости. Для этого во второй слот нужно добавить предмет из инвентаря, для условий с цистерной нужно добавить ёмкость с какой-либо жидкостью. Таким образом можно определить более точные условия для гейта.
Условия и действия золотого гейта такие же, как и у предыдущего, но добавляются несколько дополнительных для синего провода. (Гейт работает и с красными проводами).
Алмазный гейт
В интерфейсе алмазных гейтов 8 условий. Алмазные, как и предыдущие, имеют тип И или ИЛИ.
Как и у золотых гейтов, у алмазных тоже есть вторичные параметры условий.
Условия и действия алмазного гейта такие же, как и у предыдущего, но добавляются несколько дополнительных для зелёного и жёлтого проводов. (Гейт работает и с красными, и с синими проводами).
Пульсирующий гейт
Пульсирующие гейты могут быть всех вышеперечисленных типов, с теми же интерфейсами.
Но у них дополнительно есть действие "Energy Pulser". Как и такты у механического двигателя, эти пульсации тоже ускоряются со временем.
Примеры использования
Вводные примеры
Автоматическая обработка руды в печи
Здесь используются два железных гейта и красный провод. Гейт рядом с воронкой проверяет условие, что в ней нет предметов и активирует красный провод, если это так и есть. Гейт около сундука проверяет, есть ли в сундуке предметы и включён ли красный провод, и в этом случае он выдаёт сигнал красного камня. То есть если в воронке нет предметов, а в сундуке есть, то включится двигатель, и предметы из сундука будут перемещаться в воронку. Из воронки они будут помещаться в печку и обрабатываться (будем считать, что топлива в печке достаточно). И, конечно, ещё нужно добавить извлечение обработанных предметов из печки.
Продвинутые примеры
Логика гейтов позволяет заменить собой многие элементы редстоун-схем. И сделать их значительно более компактными. Элементы, которые на красном камне могут занять десятки блоков, здесь можно уместить в два-три. Но у них есть существенный недостаток: при перезагрузки игры все значения гейтов сбрасываются. Возможно, при выгрузке чанков — тоже. Таким образом, соорудить долговременную память здесь не получится. Но обычную — можно и нужно. С нее и начнем.
Ячейка памяти
Итак, для начала рассмотрим ячейку памяти, т.е. устройство, которое бы после подачи сигнала на один из входов (в нашем случае это будет красный и синий провода) запоминало бы этот сигнал и продолжало его выдавать.
Что же представляет собой наша ячейка? Самый простой вариант — это обычный золотой ИЛИ-гейт, настроенный, как показано на рисунке ниже:
Логика работы устройства очевидна: синий сигнал выключает красный, а красный, в свою очередь, выключает синий. Дополнительно, мы разместили там же возможность переключения ее в одно из состояний подачей редстоун-сигнала, что позволяет разместить рядом с ней кнопку принудительного сборса. Казалось бы, всё просто. Но у этой схемы есть один недостаток, проявляющийся, чаще всего, именно при перезагрузке игры. Что будет, если сигнала нет на обоих проводах? Условия будут обработаны одновременно. Т.е. схема начнет выдавать и красный, и синий сигналы сразу. А в следующем такте — они оба снова отключатся. Мы получим мигалку. Конечно, достаточно долгий сигнал на один из входов (та самая кнопка сброса) выведет нашу ячейку из этого состояния... до первого перезапуска игры.
Чтобы избежать этого, мы должны разнести концы нашей ячейки по разным элементам: условие «если нет синего, то красный» проверять на одной клетке, а «если нет красного, то синий» — на другой. Одна из клеток будет обработана движком раньше, другая — позже. Первая из них и определит начальное состояние ячейки. Таким образом, нам на нее нужно два золотых гейта.
Где такая ячейка может пригодиться?
Пусть у нас есть полный контейнер с ресурсами. И много печей, в которые мы хотим загружаем эти ресурсы. Простейшая, ручная реализация без использования гейтов будет выглядеть так: мы выводим трубу из контейнера, ставим на входе редстоун-двигатель, к каждой печи делаем ввод таким образом, чтобы, если в ней нет места, ресурсы шли дальше, к следующей печи (это достигается алмазной трубой или, что предпочтительнее, вводящей трубой из Additional BuildCraft Objects). Обойдя все печи, мы направляем трубу обратно в тот же самый контейнер, чтобы весь лут, которому не хватило места в печах, складывался туда, где лежал.
Теперь мы можем включить наш двигатель, и печи начнут загружаться. Но, чтобы напрасно не гонять его по трубе и не грузить движок, желательно остановить подачу лута, как только мы видим, что он возвращается обратно. И вот для автоматизации этого и может служить ячейка памяти.
Пусть сигналом на начало работы будет пустой инвентарь первой из печей, а сигналом на его конец — появление лута в трубе, ведущей от печей обратно в контейнер. Первый сигнал будет включать ячейку, второй — выключать. Также мы можем предусмотреть кнопку для включения системы вручкую. Обратите внимание, что у элементов нашей ячейки остались свободные входы, а значит — мы можем использовать одни и те же гейты как для нее, так и в роли детекторов этих сигналов. А если один из гейтов сделать пульсирующим — он вполне может заменить собой и двигатель на выходе контейнера.
Т-триггер
Следующая задача значительно сложнее. Вот у нас есть эта ячейка. И теперь мы хотим, чтобы она переключала свои состояния при каждом проходе какого-либо объекта по трубе. Проблема здесь в том, что мы не можем просто задать условие «если есть синий сигнал и прошел объект по трубе, то включить красный и наоборот». Такая схема просто начнет быстро переключать сама себя и перейдет в режим "мигалки", из которого она сама уже не выйдет. Здесь необходима более сложная логика, и именно она приведена на рисунке ниже:
Как мы можем видеть, используется алмазный И-гейт. И задействованы все его выходы, один (точнее — два, настройки их входа должны быть идентичны) из которых и служит для детектирования предметов. Также задействованы все виды проводов (зеленые и желтые должны наноситься только на тот блок, в котором мы разместили триггер, красный и синий нужно соединить с ячейкой памяти). Таким образом, мы не можем использовать провода, чтобы подвести к триггеру сигнал, по которому он будет переключаться. Его надо располагать непосредственно в том месте, где мы будем этот сигнал снимать, либо передавать сигнал через редстоун.
И есть еще одна тонкость — этот триггер, как и его аналог на редстоуне, по своей сути является колебательным контуром. Соответственно, он чувствителен к времени подачи сигнала. Т.е. в нашем случае — к времени прохождения предметов по сегменту трубы. Если это время будет достаточно длинным — он начнет переключаться из одного состояния в другие. Если же время будет, напротив, слишком коротким — гейт просто не успеет среагировать.
Поэтому важна скорость предметов. Вот условия, при которых гарантируется правильная работа триггера:
- труба непосредственно под триггером должна быть золотой;
- перед триггером не должно быть других золотых труб или иных подобных ускорителей.
Для гарантированного обеспечения этих условий, за несколько клеток до триггера рекомендуется поставить промежуточный контейнер.
Также триггер можно настроить, после замены соответствующего условия, не на предметы, а на сигнал редстоуна. Гарантируется его правильная работа от нажатия кнопки. В случае же использования панелей, а также — других источников с непостоянным временем сигнала, возможно повторное переключение триггера, если этот сигнал будет слишком длинным. В целом, условия его правильной работы такие же, как и у аналогичной конструкции из редстоуна. Разница лишь в размере.
Т-триггер же, который правильно работает при любой длительности сигнала, в принципе, можно построить, основываясь на свойстве железных труб циклически менять направление выхода под воздействием редстоун-сигнала, но это будет весьма громоздкая конструкция, размерами вполне сравнимая с аналогичным устройством на поршнях. Только более дорогая в исполнении.
В качестве примера использования Т-триггера можно назвать выведение новых видов пчёл. Для получения мутаций там требуется скрещивать два вида этих насекомых. Соответственно, в каждом новом цикле следует подавать трутней либо из из одного, либо из другого контейнера. В этом случае Т-триггер будет реагировать на прохождение пчелиной матки по трубе, переключая ячейку памяти, а контейнер с трутнями будет выбираться в зависимости от состояния этой ячейки. Конечно, прежде, чем пускать матку через триггер, следует убедиться, что она сменила свой вид... Но это уже не относится к применению гейтов.