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