Статья про тонкости игрового процесса в игре Factorio.
Поговорим о программировании фонаря без знаний программиста. Сделаем простой световой сигнал.
-----------------------------------------
Важное замечание! Эта статья была написана для первой версии игры Factorio. Некоторые механики игры, предметы или их свойства могут не совпадать с текущей версией игры.
-----------------------------------------
Введение.
В этой статье попробуем разобраться в программировании обычного фонаря, в простонародье называемого лампочкой. Научимся включать и выключать лампочки по разному событию. Кратко разберём только самые простые примеры. Если эти примеры покажутся смешными или бесполезными, не стоит забывать, что это лишь примеры.
Но для начала основные понятия, как же без них?
В игре есть логика. Логические предметы и логическая инфраструктура. Это всё нужно для создания алгоритмов и для программирования устройств в игре. Factorio позволяет создавать самые простейшие программы даже не программируя. Многие возможности логики заложены в устройства и машины.
Не нужно путать логику и логистику. Логика – это то, о чём говорилось выше. Логистика – это про движение ваших поездов, дронов перевозящих/переносящих предметы.
Для успешного программирования фонаря нам понадобится один из двух сигнальных проводов: красный или зелёный.
Сделать их несложно в руках. Можно в будущем наладить отдельное производство. Но нужно помнить, что когда провод подключаем – он висит, когда делаем повторное подключение «поверх» чтобы снять – он исчезает навсегда, как будто мы его выкинули. Поэтому зря провода не тратьте, если у вас их мало.
Подключается провод двумя щелчками: 1) на первом объекте один щелчок 2) на втором объекте второй щелчок. Провод на месте!
Если научились делать чертежи и сохранять их, то учтите, что все «подвешенные» сигнальные провода сохраняются в чертеже, а после установки чертежа и постройки его объектов – все сигнальные провода бесплатно остаются висеть на своих местах. Это значительно экономит ресурсы, если у вас большие производства, которые хочется скопировать на новое место.
Теперь про фонари: фонари работают в той зоне, которая покрывается электричеством. За пределами электрической зоны фонарь не включится. Поэтому расставляем фонари в зоне действия любой опоры ЛЭП. В тёмное время суток фонари автоматически загораются, в светлое время суток отключаются.
У нас полный резервуар?
Где-то расположен резервуар наполняемый жидкостью. Нужно визуально понимать, заполнился он до верха или ещё нет. Каждый раз подбегать и проверять – не позволяет ни время, ни расстояние до него. Как бы издалека одним глазком определять-то?
Для примера используем резервуар с мазутом. Берём фонарь, устанавливаем на удобном видимом месте возле резервуара. Убеждаемся, что фонарь попадает в зону электрического покрытия любой опоры ЛЭП. Берём в руки сигнальный провод красный или зелёный. Соединяем фонарь с резервуаром:
Рекомендую приучить себя к простым правилам расстановки сигнальных проводов:
- Сигнальный красный провод устанавливать на те схемы, в которых ограничиваются, блокируются, включаются/выключаются устройства. То есть красный – это запрет.
- Сигнальный зелёный провод устанавливать на схемы с оповещением, с передачей сигналов, с другой логикой, не ограничивающей устройства. То есть зелёный – это передача данных.
Таким образом, по цвету провода всегда будет видно, где происходит передача сигнала, а где отключение/включение.
После соединения фонаря с резервуаром зелёным проводом, фонарь надо запрограммировать. Щёлкаем по фонарю:
В окне управления логикой фонаря мы видим надпись возле красной точки: «Выключено логической сетью». Это значит, что мы ещё не создали условие, которое фонарь должен выполнить чтобы включиться. Давайте создадим. В правом окошке видим «Режим работы» и точку, установленную на пункте «Включить/Выключить». Так и должно быть. Это подразумевает, что фонарь будет включаться или выключаться когда выполнит условие или когда не выполнит. Само условие включения настраивается ниже.
Так как в резервуаре из нашего примера залит мазут, а мы хотим настроить работу фонаря для этого резервуара именно с мазутом, то щёлкаем по условию, ищем и выбираем мазут.
Затем щёлкаем по правому значению условия, где написан ноль, и нам открывается вот такое окно:
Нам предлагают выбрать либо какой-то другой предмет или жидкость, либо вписать числовую константу. Мы не сравниваем наш мазут ни с чем. Мы просто хотим чтобы фонарь загорелся, когда резервуар наполнится на полный объём 25 000 жидкости. Поэтому пишем наш объём резервуара вручную в текстовое поле или выставляем перемещением движка.
На рисунке 5 заметно, что вписано не 25 000, а 24 000. Почему меньше? Потому, что полностью на 25 000 резервуар может не заполниться из-за слабого давления в трубах, если в резервуар жидкость заливается не помпой, а через трубу. Это всегда нужно учитывать при точных расчётах. Немного полезной информации о давлении жидкости и перемещении по трубам, можно прочитать в статье «Как перемещать жидкости в Factorio».
Здесь мы не будем использовать вариант мазут = 24 000. Мы выставим условие мазут > 24 000. Ведь практически, если жидкость залилась больше 24 000, то она уже приближается к 25 000, то есть, резервуар почти полный. Можно даже написать 24 500 или 24 900.
Открываем выпадающий список со знаками для условия и выбираем знак «больше»:
Обратите внимание, что если написать в условии 24 000, или даже 24 543, то в окне условия это число будет отображаться одинаково округлённо: «24К» от величины Кило – тысяча, 24 000 = 24К, 24 543 = 24К. Но это только здесь, только для общего понимания. В реальности считается то число, которое мы вписали. Можно нажать снова и там оно будет видно таким, какое есть на самом деле. Итак, все операции по программированию фонаря выполнены.
После всех манипуляций получили то, что отображено на рисунке 8. Логическая сеть определит, когда мазута в резервуаре станет больше 24К (больше 24 000) и включит фонарь.
На рисунке 9 логическая сеть включила фонарь как только мазут заполнил в резервуаре больше 24 000. Фонарь горит даже в светлое время суток, его работа контролируется логической сетью. Он погаснет, если мазут уменьшится и перестанет быть больше 24 000.
По такому же принципу можно установить условие для визуальной сигнализации о заполнении половины резервуара: объём резервуара 25 000 делим пополам, получаем 12 500. Теперь в условии используем знак больше или равно, а в константу вписываем 12 500. Если мазута станет ровно 12 500 или даже больше – сработает условие и фонарь включится.
Наши сундуки пусты?
Допустим, поезд забирает патроны и увозит на дальний форпост. Как визуально определить, что в сундуках патроны закончились и в поезд ничего не грузится? В данном примере мы проигнорируем тот факт, что после нажатия клавиши «Alt» на сундуках отобразятся предметы лежащие внутри. Станция может находиться далеко, а сигнальный провод может быть протянут в место нашей дислокации, и фонарь становится для нас сигналом удалённого действия в сундуках. Для примера используем ж/д станцию на один вагон, с сундуками с одной стороны. В качестве патронов возьмём магазины с бронебойными патронами.
Так как нас интересует общий объём всех сундуков, то сигнальным зелёным проводом соединим каждый сундук с соседним, пока все они не окажутся связаны в логическую цепочку. Затем неподалёку установим фонарь, который по условию может находиться за несколько километров от станции, а с сундуками соединён сигнальным проводом через опоры ЛЭП.
Да, чтобы дотянуть сигнальный провод туда, куда он не дотягивается, можно установить опоры ЛЭП и на них повесить сигнальный провод. Это удобно, если требуется прокинуть один или два сигнальных провода куда-то далеко. Электрические опоры помимо медного электрического провода способны держать сигнальные зелёный и красный провода.
Соединяем сундуки с фонарём:
После того как последовательно соединили все сундуки и фонарь, открываем окно логической настройки фонаря:
В этот раз выставляем параметры по примеру с резервуаром. Только вместо мазута выбираем магазины с бронебойными патронами. Так как нас интересуют пустые сундуки, то ставим условие = ноль. То есть, для нас важно чтобы фонарь загорелся когда магазинов с бронебойными патронами станет ноль. Попросту говоря, когда сундуки опустеют.
После закрытия окна видим, что фонарь не включился, а у одного из сундуков на сигнальном проводе горит лампочка:
Зелёная лампочка на сигнальном проводе одного из сундуков горит потому, что сундук до сих пор продолжает выполнять условие «больше ноля». Там всё ещё лежат магазины с бронебойными патронами. Из-за этого фонарь не срабатывает.
Но стоит изъять все магазины с бронебойными патронами, как тут же в ящиках суммарно выполняется условие = ноль, которое включает фонарь:
Нужно заметить, что если ящики расположены не на ж/д станции, а на дальнем форпосте и турели берут из них партоны, то принцип работы не меняется. Как только во всех ящиках общее количество магазинов с патронами принимает значение = ноль, фонарь загорится независимо от времени суток. Сам фонарь можно установить в центре основной базы, на видном месте. А сигнальные провода можно протянуть по опорам ЛЭП. Но важно помнить, что повторное протягивание сигнального провода того же цвета на уже протянутом участке – снимет существующий сигнальный провод.
Конвейер заполнен?
Ещё один пример наглядно продемонстрирует, когда конвейер идёт полностью загруженным, а когда лента полупустая. Например, где-то в производстве мы хотим видеть, заполняемость конвейера. Так как вся лента собирается из отдельных конвейеров, то естественно, к каждому из них можно подключиться отдельно. Пусть по конвейеру будут идти железные пластины, иногда полным потоком, иногда не очень.
Соединяем выбранный конвейер и фонарь сигнальным зелёным проводом:
Только вы присоедините сигнальный провод к конвейеру, как он тут же остановится. Он не сломался, но он перестаёт прокручиваться и перевозить предметы на следующий конвейер. Всё дело в том, что конвейер тоже имеет возможность программирования. После подключения сигнального провода конвейер выключается логической сетью до создания условия.
Щёлкаем по этому конвейеру, открывается окно логики, в котором мы видим уже знакомую галочку на пункте «Включить/Выключить». Она то и остановила конвейер, так как внизу условие пустое:
Но условие задавать мы не станем, ведь мы не конвейер сейчас программируем, наша задача запрограммировать фонарь. Поэтому снимаем галочку с пункта «Включить/Выключить»:
Сразу, как убираем галочку – конвейер включается и предметы снова начинают перемещаться по ленте. А нас интересует галочка на пункте «Считывать содержимое конвейера». Ставим её. Это позволит нашему конвейеру считывать количество проходимых через него предметов.
Например, в резервуаре и в сундуке мы не касались этой темы, так как там подсчёт объёма ведётся автоматически. Здесь конвейер является программируемым механизмом, и для него важно указать, чего мы хотим: включать/выключать его по команде или считать сколько по нему проходит предметов. Или и то и другое одновременно.
Теперь обратите внимание, что точка в блоке «Режим чтения содержимого» стоит на пункте «Импульсы». Импульсы дают нам один подсчёт предмета при появлении его на конвейере. Нас такой вариант не устраивает, так как предметы идут хаотично, нас интересует их общее количество. Чтобы считать сразу полное количество предметов проезжающих по конвейеру выбираем пункт «Непрерывно»:
По сути, никакого программирования для конвейера мы не использовали. Всё, что мы сделали – это отключили возможность включения/выключения по условию, но включили непрерывный подсчёт предметов на конвейере.
Теперь спокойно переходим к уже знакомому нам окну программирования логики фонаря:
Всё, что нам требуется, это выставить условие, при котором фонарь загорится. Нас интересует полный конвейер. На конвейер максимально вмещается 8 железных пластин, которые мы укажем в условии. Итак, нам нужно, чтобы фонарь включился, если на конвейере стало 8 железных пластин, то есть железные пластины = 8. Находим и выбираем в левой стороне условия железные пластины, а в правой стороне условия вписываем цифру 8:
Теперь, когда по конвейеру будут проходить 8 железных пластин, фонарь будет загораться, сигнализируя, что конвейер полный:
Если же на конвейере окажется меньше 8 железных пластин, это будет означать, что он не полностью загружен, и фонарь по условию гореть не будет:
Выводы.
Все подключения фонаря как сигнального элемента являются в статье лишь упрощёнными примерами. Любой игрок может поставить для себя где угодно и как угодно похожую схему, если пожелает. Но на практике могут применяться более продвинутые варианты использования сигнальных проводов, программирования фонарей, устройств и машин.
Вместо фонаря могут быть использованы другие устройства, включающиеся/выключающиеся по условию.
Фонарь, при необходимости, может быть окрашен в любой цвет помимо белого. Для этого используются дополнительные возможности программирования логики.
Всегда нужно помнить, что сигнальный провод красного или зелёного цвета вешается на опоры ЛЭП щелчком мыши и протягивается между соседними опорами на то расстояние, на которое опоры могут максимально стоять друг от друга. На опоры можно повесить и сигнальный красный и сигнальный зелёный провода одновременно. Это удобно, если требуется провести на расстояние два раздельных сигнала. Снять с опоры все провода, и сигнальные, и обычный медный можно щелчком мыши по опоре ЛЭП с зажатой клавишей «SHIFT». Опора после этого останется пустой. Снова подвесить как медный, так и сигнальные провода можно как и прежде – щелчком мыши по одной опоре и протянув до другой опоры. Снять конкретный провод можно просто взяв такой же в руки и заново подвесив его – это его отцепит и удалит с опор ЛЭП.
Чертежи.
К этой статье нет чертежей, но чертежи из других статей можно скачать в текстовых файлах в моём канале Telegram.
-----------------------------------------
Прямая ссылка на канал Telegram: https://t.me/format_aa
-----------------------------------------
Подпишись на канал и узнавай больше +
#Формат_АА
#Factorio
#схемы
#чертежи
#логика
#программирование
#фонарь
#резервуар
#конвейер
#сигнальный
#провод