Статья про тонкости игрового процесса в игре Factorio.
В этой статье рассказывается о примере применения сравнивающего комбинатора в Factorio.
-----------------------------------------
Важное замечание! Эта статья была написана для первой версии игры Factorio. Некоторые механики игры, предметы или их свойства могут не совпадать с текущей версией игры.
-----------------------------------------
Предисловие.
Пример, разбираемый в текущей статье не имеет аналогов применения в Factorio. Даже, при необходимости выполнения подобной задачи, в игре найдутся более адекватные и простые способы её решения. Данный пример предназначен, в первую очередь, для понимания работы сравнивающего комбинатора.
Задача с конвейерами.
Поставим себе условие задачи: имеются две конвейерные ленты. На одном конвейере железные пластины, на другом конвейере медные пластины. Там, куда идут эти пластины, их требуется очень мало. Например, железных пластин хватает. А вот медные идут с избытком.
По заданию нужно каким-то образом с помощью сравнивающего комбинатора ограничить поток медных пластин до скорости потока железных пластин:
Начнём с того, что установим сравнивающий комбинатор между конвейерами и подведём к нему электричество:
В игре используется перевод с английского. Некоторые технические моменты сильно упрощаются до игровых понятий. Отсюда, часть конвейерной ленты называют «тайл», от английского tile – плитка (в игре «клетка»). В реальности конвейерная лента, внешне идентичная игровой, называется пластинчатой цепью или пластинчатой транспортёрной цепью. Каждый элемент такой пластинчатой цепи называется «звеном».
Чтобы не отходить от игровых понятий, далее будем применять ту же терминологию, которая введена в игре. Элемент конвейерной ленты будем называть клеткой.
Чтобы комбинатор мог что-то с чем-то сравнивать, нужно сначала посчитать это. А чтобы посчитать количество предметов на клетках конвейеров, нужно эти клетки соединить сигнальными проводами. Для собственного удобства стараемся использовать всегда сигнальный зелёный провод для соединения логики, которая считает, а сигнальный красный провод использовать для логики, которая включает/отключает.
Соединяем клетку нижнего конвейера с клеткой верхнего конвейера и, затем, с входом в комбинатор сигнальным зелёным проводом:
Не важно, что одним сигнальным проводом соединили клетки разных конвейеров – сигналы этих конвейеров должны вместе поступить на вход сравнивающего комбинатора. Здесь сигналы о медных пластинах и о железных пластинах одновременно будут передаваться по одному сигнальному проводу.
Как видно из рисунка 3 – соединение сигнальным проводом остановило конвейеры на этих клетках. Всё потому, что эти клетки конвейеров по умолчанию ожидают условие для включения логикой. Так как условие на данных момент не установлено, то и конвейеры не включаются.
Позже мы зададим необходимые условия работы этим клеткам конвейеров. Они будут считать проходящие через них пластины. В поставленной нами задаче необходимо ограничивать медные пластины до такого же количества железных пластин. Для этого выход комбинатора соединим сигнальным красным проводом с клеткой нижнего конвейера, находящейся сразу ДО клетки, на которой будет вестись подсчёт пластин.
Таким образом, комбинатор будет включать/выключать эту клетку конвейера с помощью сигнального красного провода, а последующая клетка конвейера будет считать, сколько проходит медных пластин.
Обратите внимание: эти две соседние клетки на конвейере не соединены между собой сигнальными проводами!
Когда все элементы логической цепочки соединены сигнальными проводами, пришло время настроить логику их работы.
Сначала щёлкаем по клетке верхнего конвейера, которая соединена сигнальным проводом. Настраиваем в открывшемся окошке режим работы: убираем галочку с пункта «Включить/Выключить», ставим галочку на пункте «Считывать содержимое конвейера». Затем выбираем режим чтения содержимого: «Непрерывно». Теперь эта клетка конвейера не будет включаться/выключаться логикой, её задачей будет вести непрерывный подсчёт проходящих по ней предметов.
Обратите внимание, как только был установлен режим работы конвейера только для чтения содержимого, как логика тут же опять включила эту клетку конвейера и железные пластины продолжили движение:
Щёлкаем правой кнопкой мыши с зажатой клавишей «SHIFT» по настроенной клетке верхнего конвейера для копирования настроек. Не отпуская клавишу «SHIFT» щёлкаем левой кнопкой мыши по соединённой с ней сигнальным зелёным проводом клетке нижнего конвейера. Настройки вставляются в нижнюю клетку конвейера и она также включается логикой и переходит в режим непрерывного чтения содержимого.
Что клетка конвейера была включена заметно по медным пластинам, которые были на ней заперты, но после включения смогли продолжить движение по ленте:
Анимация считающих конвейеров отображается «бегающей» по клетке конвейера туда-сюда красной лазерной полосой. На каждый предмет, вошедший на считающую клетку конвейера, загорается сигнальный голубоватый огонёк, показывающий, что конвейер увидел предмет и посчитал его.
Теперь щёлкаем по сравнивающему комбинатору.
Сравнивающий комбинатор – это элемент логической цепи позволяющий сравнивать между собой входящие сигналы и подавать на выход результирующий сигнал в зависимости от результата сравнения и установленных заранее параметров.
В нашем случае входящие сигналы – это количество железных и медных пластин передаваемых на вход комбинатора по сигнальному зелёному проводу. Вот их то и нужно сравнить между собой. А для этого установим в условии формулу сравнения. Сначала в левой части условия откроем выбор и найдём железную пластину:
Таким же способом выбираем в правой части условия медную пластину:
Нашей задачей является включение клетки конвейера, которая будет пропускать через себя некоторое количество медных пластин. Пропускать медные пластины конвейер будет только в том случае, если железных пластин стало больше, чем медных. Медные пластины будут выходить сразу же после выхода железных, а затем снова конвейер будет выключен до выполнения условия. Открываем выпадающий список и выбираем знак «больше»:
На выход мы подадим сигнал равный единице. Конвейер будет реагировать на неё чтобы включиться. Но это мы укажем уже в условиях самого конвейера. А сейчас устанавливаем точку напротив единицы:
Далее выбираем сигнал, который и будет иметь значение единицы, если железных пластин стало больше медных пластин. По аналогии с разрешающим зелёным цветом в светофоре, выберем и тут зелёный сигнал, разрешающий включать конвейер:
Вот так выглядят настройки сравнивающего комбинатора в нашем случае:
Пришло время настроить ограничивающий конвейер, который включается/выключается по условию:
Давайте ещё раз вспомним всю логическую цепочку: с нижнего конвейера и с верхнего конвейера сигнальным зелёным проводом собирается количество проходящих железных и медных пластин. Эта информация тем же сигнальным зелёным проводом передаётся на вход комбинатора. Сравнивающий комбинатор сравнивает количество железных и медных пластин по условию: железных пластин должно быть больше медных пластин. Если это условие совпадает с теми данными, которые пришли по сигнальному зелёному проводу, то комбинатор выдаёт на выход зелёный сигнал со значением в единицу. Если железных пластин оказалось меньше или равно медным пластинам, то условие не выполнилось и комбинатор не выдаёт никакой сигнал. Тогда на выходе ничего нет.
По сигнальному красному проводу из сравнивающего комбинатора зелёный сигнал размером в единицу идёт в конвейер. Конвейер должен включаться по условию, когда зелёный сигнал равен единице. А проще, если зелёный сигнал больше нуля. Так и устанавливаем. Выбираем в левой части условия зелёный сигнал, в правой части условия ноль, а между ними ставим знак «больше»:
Теперь, когда по верхнему конвейеру проходят железные пластины и подсчитываются, а по нижнему в это время не идут медные пластины (потому что они заблокированы), то по сигнальному зелёному проводу идёт сигнал только о железных пластинах. Так как в этом сигнале железных пластин больше медных (которых там вообще нет в данный момент), то сравнивающий комбинатор считает условие выполненным: железных пластин больше медных пластин, значит на выход подать зелёный сигнал равный единице.
На блокирующую клетку конвейера приходит зелёный сигнал размером в единицу, и включает конвейер, так как по его условию, он включается, если зелёный сигнал больше нуля.
Включившись, конвейер начинает пропускать через себя медные пластины. Они поступают на следующий конвейер, который считает их и отправляет по сигнальному зелёному проводу вместе сигналом о железных пластинах.
Сравнивающий комбинатор видит, что медных пластин стало поровну с железными или может, даже больше, и выключает зелёный сигнал размером в единицу. Ведь условие нарушено.
Нижняя клетка конвейера, которая получала зелёный сигнал размером в единицу, теперь ничего не получает, и по её условию зелёный теперь не больше нуля. Конвейер выключается и медные пластины больше не проходят через этот конвейер.
В это время по сигнальному зелёному проводу приходит сигнал, что опять по верхнему конвейеру едут железные пластины, а от медных ни слуху, ни духу. И вся история повторяется. И так постоянно: нижний конвейер выдаёт порциями медные пластины в те моменты, когда проходят железные пластины по верхнему конвейеру:
Чтобы немного украсить нашу логическую схему и придать ей визуальную наглядность, установим фонарь для демонстрации момента, в который проходят медные пластины. Обычно можно разглядеть маленькие голубые светодиоды на считающих конвейерах, они загораются при прохождении пластин. Но фонарь есть фонарь – он будет отчётливо виден даже со стороны. Более подробно о работе фонаря в логических схемах, о настройках условий логики фонаря можно почитать в этой статье.
Соединяем выход комбинатора всё тем же сигнальным красным проводом с фонарём:
Щёлкаем по фонарю и в условии выбираем те же параметры включения, что и в конвейере – зелёный сигнал больше нуля:
Теперь при каждом включении конвейера с медными пластинами загорается фонарь:
Но этого мало. Откроем фонарь ещё раз и установим галочку напротив «Использовать цвета». Таким образом зелёный сигнал будет передаваться в фонарь не только как сигнал равный единице, но и как источник зелёного света:
Теперь фонарь загорается ярким зелёным огнём каждый раз при включении конвейера и пропуске медных пластин:
Ошибки и недостатки построенной логической схемы.
Если не интересно читать разбор ошибок схемы, то можно пропустить и спуститься на последнее предложение.
Выше была собрана схема наглядно показывающая работу сравнивающего комбинатора на примере уменьшения потока на конвейере. Эта схема имеет досадные ошибки и в таком виде не желательна к использованию.
Схема создавалась практически, в «лабораторных» условиях, когда имелись два стабильных потока пластин: медные пластины шли полным потоком, железные пластины шли по две симметрично расположенные пластины через определённые промежутки. Стоит хоть немного разбалансировать поток железных пластин и идеальный подсчёт будет нарушен. При подаче на подсчёт не двух, а трёх железных пластин – медных по три выдаваться не будет. Конвейер открывается и закрывается, выпуская по две симметрично расположенных на конвейере медные пластины.
Любая разбалансировка нижнего конвейера таким же образом может привести к неправильным результатам. Только теперь медные пластины могут выдаваться то ровным потоком, то нет.
Если всё же есть интерес к созданию подобной правильно работающей схемы, то построить её можно – она будет сложнее, будет выдавать идеально правильный результат, но практически, нигде не применима в игре.
Чертежи.
К этой статье нет чертежей. Чертежи из других статей можно скачать в текстовых файлах в моём канале Telegram.
-----------------------------------------
Прямая ссылка на канал Telegram: https://t.me/format_aa
-----------------------------------------
Подпишись на канал и узнавай больше +
#Формат_АА
#Factorio
#схемы
#чертежи
#сравнивающий
#комбинатор