Barotrauma

Barotrauma

28 ratings
Проводка для упоротых
By Saiborg
Основные нюансы вайринга в баротравме.
То что я использую и всякие неожиданные (в том числе и для меня самого) решения.
Всякий плагиат и псевдоумные мысли.
   
Award
Favorite
Favorited
Unfavorite
Логика - начало.
Эта простая связка Реле(состояние_из) -> Компонент НЕ -> Реле(назначить_состояние).
Если первое реле включено, то второе выключено и наоборот.

Отсюда мы начинаем покорять этот занимательный мир глубоководных тварей что за бортом и руконогих раков что на борту.

Шлюз - начало
Что есть шлюз?
Если верить Википедии, то "Шлюз состоит из относительно небольшой камеры с двумя последовательно расположенными герметичными дверями, которые не открываются одновременно."

Теперь немного про двери.


Если мы пошлём в пин1 любой ненулевой сигнал дверь поменяет своё статус (открыта/закрыта)
Если мы пошлём в пин2 "0" - дверь станет закрыта/"1" - открыта.

Пин3 передаёт статус двери ("1" - открыта/"0" - закрыта)
Пин4 передаёт от 0 до 100 целостность двери. Если "0" - то дверь сломана и не может выполнять своих функций.

Компонент "И"

Если в Пин1 и Пин 2 одновременно приходит любой сигнал кроме нуля то мы испускаем сигнал в Пин4.
Испускаемый сигнал можно перезаписать, для этого надо послать новый сигнал в Пин3.


Возвращаясь к шлюзу.
Нам надо, что бы двери не были открыты одновременно( статус "1"), этого проще всего добиться при помощи компонента "И"
Логика:
если дверь1 и дверь2 открыты - закрыть все двери.

А теперь настройки самого компонента:

MaxOutputLength - максимальная длина в символах вывода. Так как мы посылаем один знак - то можно поставить еденичку.
Мощность - это тот сигнал который испускает компонент если условия соблюдены(в нашем случае он говорит "0" - "закрыть!" если дверь1 и дверь2 не закрыты, т.е имеют статус "1")
Неверный выход - это то, что компонент испускает если условия не соблюдены (две двери НЕ открыты одновременно) в нашем случае там ничего нет.

Теперь у нас есть помещение у которого двери могут быть:
0 - 0 - закрыты обе двери
0 - 1 - открыта только одна дверь
1 - 0 - открыта только другая дверь
А если вдруг обе двери открылись (1 - 1) то наше реле сразу же постарается их закрыть (пошлёт "0")
Продвинутый шлюз
А теперь я хочу что бы мой шлюз имел две режима.
Что бы когда я пристыковался люки вели себя как обычные двери, а когда я покоряю глубины Европы - вовремя закрывались.

Теперь перед нами стыковочный люк:

Состояние_ИЗ у него такое же как и у дверей - "1"- пристыкован/"0"-отстыкован.

Логика:
Если мы НЕ пристыкованы, то компонент "И" - закрывает двери.

Реализация:

Из компонента "И" сигнал на закрытие дверей идёт в реле и уже из этого реле в двери.
Если мы пристыкованы, то наше реле ВЫКЛЮЧЕНО и сигнал от компонента "И" никуда не доходит.

Если стыковочный люк НЕ пристыкован, то наше реле включено и задраивает люки

А когда мы пристыкованы, то лично мне, например, нравится когда двери открываются автоматически, для этого ставим детектор движения, настраиваем его зону чувствительности что бы он срабатывал только на живых людей и подключаем его через "пристыкованное" реле
Цвета - раскраска
Компонент ЦВЕТ:
  • Пин1 - вводим 0-255 (красный канал)
  • Пин2 - вводим 0-255 (зелёный канал)
  • Пин3 - вводим 0-255 (синий канал)
  • Пин4 - вводим 0-255 (альфа канал )

  • Пин5- получаем цвет в формате R.G.B.A который можем пихать в лампочки, что бы они приятно светили)

И теперь мы умеем в цветовую индикацию, но сначала надо вспомнить про смешение цветов.
  • Красный - 255.0.0.255
  • Жёлтый - 255.255.0.255
  • Зелёный - 0.255.0.255
И нет, это не маски подсетей, это цвета в баротравматическом формате (RGBA).
Несложно заметить (!) что у нас меняются только два канала - красный и зелёный, а это значит, что мы можем при помощи всего двух компонентов БОЛЬШЕ раскрашивать наши лампочки и текстовые экраны в зависимости от показаний.

Возьмём к примеру наш реактор и пин (FUEL_PERCENTAGE_OUT) который выдаёт сколько процентов топливных стержней у нас осталось. В Вики сказано, что он выдаёт 0-100, но фактически он выдаёт 0-400, так как мы можем запихать сразу 4 стержня.
Допустим мы будем считать, что если осталось меньше 10% стержней, то всё плохо, от 10 до 60% всё нормально и выше 60% - всё совсем хорошо.
Значит красный канал у нас работает от нуля до 60, а зелёный от 10 и выше. там где каналы пересекаются у нас будет бодрый жёлтый цвет.
На самом деле я пользуюсь вот такой вот шпаргалкой:

Логика выглядит так:
Мы проверяем (FUEL_PERCENTAGE_OUT) и если оно больше 60, то красный канал ="0" иначе "255"
Мы проверяем (FUEL_PERCENTAGE_OUT) и если оно больше 10, то зелёный канал ="255" иначе "0"

Внезапно всё очень просто.
Мы теперь можем измерять и раскрашивать содержание кислорода, состояние (CONDITION_OUT) устройств, дверей и люков, уровень заряда батарей и конденсаторов, подсчитывать запасы оставшегося топлива, мощу с которой тащит наш СамыйГлавныйДвигатель(перед измерением используем компонент ABS) и что-нибудь другое, у чего можно выделить граничные значения)
Перископы - Индикация присутствия и струльбы
У перископа есть два выхода:
POSITION_OUT выдаёт 0-360 когда мы пыримся в перископ и не передаёт нифига, если мы перископ не трогаем
TRIGGER_OUT - выдаёт "1", если мы нажимаем на струляло.

Так же, если к POSITION_OUT подключена камера, пушка или прожектор - переносит туда наш "point of view"

Тут мы идём дальше в магию лампочек:
Если кто-то использует перископ мы хотим, что бы загоралась лампочка, а если из этого перископа ещё и струляют хочу что бы лампочка меняла цвет с зелёного на красный.

Красная лампочка - 255.0.0.255
Зелёная лампочка - 0.255.0.255

Вариант 1:
POSITION_OUT с перископа заводим в сигнал1/2 компонента "ИЛИ", если сигнал приходит - то посылаем "1" в состояние лампочки, если сигнала нет, то шлём "0"
TRIGGER_OUT с перископа заводим в компонент СИГНАЛ, если получаем "1", то шлём "255.0.0.255" в цвет лампочки, или шлём "0.255.0.255"

В этом варианте можно ещё и включать прожектор на орудии, для этого с компонента ИЛИ посылаем сигнал в SET_LIGHT, тогда снаружи будет видно, что кто-то управляет пушкой мимо которой мы уплываем от хасков...

Вариант 2:
Используем компонент "Concatenation"
POSITION_OUT с перископа заводим в сигнал1/2 компонента "ИЛИ", если сигнал приходит - то посылаем "0.255" в сигнал_2 (Concatenation), если сигнала нет, то шлём "0.0"
TRIGGER_OUT с перископа заводим в компонент СИГНАЛ, если получаем "1", то шлём "255.0" в сигнал_1 (Concatenation), или посылаем "0.255" если никто не струляет)
В настройках компонента "Concatenation" указываем разделитель "."
Вывод компонента "Concatenation" заводим в назначение цвета лампочки. Лампочку включаем в редакторе.
Тестируем, радуемся.

Перископы - Безопасность.
Так как мы плаваем в команде не с самыми разумными представителями флоры и фауны Европы на борту, иногда нам надо проконтролировать, что бы наши операторы турелек не стреляли и не портили нам стелс.

Для этого мы подключаем контакт TRIGGER_OUT c перископа не напрямую в рельсотрон, а через промежуточное реле. И уже включая и отключая это реле мы "ставим/снимаем с предохранителя" наше вооружение.

Тут нам снова поможет компонент "ИЛИ" мы заводим в любой из его пинов TRIGGER_OUT с перископов (можно подключить до 10 перископов на один компонент), вывод "1" если что-то есть(кто-то струляет), иначе "0" (никто не струляет)

И дальше чуть-чуть магии компонента "И":
Если Промежуточное Реле НЕ включёно (промежуточное реле-состояние_из -> компонент НЕ) и есть сигнал с компонента "ИЛИ" (кто-то неистово жмёт на гашетку), то включаем сирену, красные лампы, выводим на дисплей негодующие тексты и затапливаем орудийный отсек))
Стелс
Что бы красиво стелсовать - надо потушить реактор, внешнее освещение и уползать на низкой скорости.

Да будет реле!
Если оно включено, то стелсуем:
  • Посылаем с компонента "сигнал" сигнал "любой" в реакторный пин SHUTDOWN
  • Посылаем сигнал "0" из компонента "сигнал" в состояние ламп внешнего освещения
  • Посылаем сигнал "0.1" из компонента "сигнал" в компонент "Умножение"....

Что это за компонент "умножение"?
Этот компонент стоит на выходе из нашего Навигационного Терминала (VELOCITY_X_OUT) и мы умножаем скорость (мощщу движков) на "1" если мы идём полным ходом и на "0.1" если крадёмся...

Следовательно если мы не стелсуем, то:
  • Посылаем с компонента "сигнал" сигнал "ничего" в реакторный пин SHUTDOWN
  • Посылаем сигнал "1" из компонента "сигнал" в состояние ламп внешнего освещения
  • Посылаем сигнал "1" из компонента "сигнал" в компонент "Умножение"....

Опционально можно заодно выключать возможность пострелять из турелей, но мне нравится много кнопочек и поэтому турели включаются/отключаются отдельно)
Concatenation Component
Оно же ВЗАИМОСВЯЗЬ.

Позволяет делать красивые алярмы.
Например есть у меня два триггера ("1"/"0") и ("2"/"0"), я их завожу в этот компонент в первый и второй пин соответсвенно и на выходе получаю следующие варианты:
("1" "2")
("0" "2")
("1" "0")
("0" "0")
В качестве разделителя я использую ПРОБЕЛ, в качестве нулевого вывода использую НИЧЕГО.
Эта схема может масштабироваться!
Из трёх взаимосвязей я могу получать уже 4 события в один текстовый дисплей.

Баззер и бегущая строка с текстом:
"Внимание! На палубе "1" возгорание! На палубе "2" возгорание! Затопление в реакторном отсеке! Повреждён кормовой шлюз! Обнаружены инопланетные формы жизни на корабле!"
Оченно атмосферно делает.....
3 Comments
44 May 8, 2023 @ 2:12pm 
больше 3 символов не перевариваю, можно сократить руководство?
Torfey Apr 21, 2023 @ 9:47pm 
Spasib0, uporolsya
Dwarf Apr 19, 2023 @ 3:25pm 
Однокомпонентный контроль дверей хорош из-за дешевизны, но для удобства лучше добавить хотя бы задержку, чтобы дверь не закрывалась сразу при попытке её открыть. А вообще приятнее использовать чуть более дорогой вариант, с закрытием одной двери при открытии другой.