Inputs и Outputs

Материал из CSM Wiki
Перейти к навигации Перейти к поиску

Логическая система Ввода/Вывода (Inputs/Outputs) взаимодействия объектов в игре очень полезная особенность игрового движка Source.

Обзор

Энтити имеют два способа взаимодействия друг с другом: отправка "output" (вывода) или принятие "input" (ввода) другой энтити. К примеру игрок нажал на кнопку (func_button) — загорелась синяя лампочка (light); то есть кнопка послала сигнал "аутпут", для лампочки это будет "инпут" ввод — получаемый сигнал. Один аутпут может быть использован для активации нескольких объектов, то есть породить несколько инпутов. Правильно настроенный аутпут объединяется с инпутом в "соединение" которое передаёт дополнительные параметры приёмнику, какова задержка перед тем как отправить аутпут и должен ли будт аутпут послан позже. Аутпут может быть послан любому инпуту и наоборот. Это позволяет создавать сложные и мощьные взаимодействия между энтитями.

Как пример logic_timer может послать OnTimer аутпут, когда истечёт время указанное в таймере. Этот же аутпут может быть направлен — Show инпуту спрайта который станет видимым когда истечёт время. Так же этот аутпут может быть послан SparkOnce инпуту какого-нибудь env_spark росле чего он выпустит искры. Используя параметры соединения вы можете задать задержку перед отправкой аутпута или послать его только один раз.

Для пользователей знакомых с системой взаимодействия энтити первой Half-Life, параметры targetname и target теперь устарели и стали подмножеством системы I/O. Trigger_multiple который мог раньше посылать только однотипный сигнал, теперь имеет несколько вариантов: OnStartTouch, OnEndTouch, OnTouch и т.д. Эти аутпуты могут быть подключены к любому числу энтити и иметь персональные настройки соединения (Delay, Fire once only), использование мульти-менеджеров устарело, теперь они стали частью системы I/O. Параметр killtarget теперь заменён Kill инпутом.

Output

Аутпут — событие которое произойдёт после изменения статуса энтити. Это может быть нажатая кнопка, таймер, закрывашаяся дверь. Для энтити может быть задано любое количество аутпутов, это даёт возможность активировать её по любому возможному условию. Все аутпуты прописываются в окне Object Properties, во вкладке Outputs находятся все доступные оутпуты для данной энтити.

Здесь находятся параметры:

  1. Имя аутпута.
  2. Имя энтити которой будет послан аутпут, то есть которую нужно активировать.
  3. Имя инпута — это действие которое совершит энтити после принятия аутпута.
  4. Parameter override to use if data is accepted by the target input. Often this is a number used by the input function (see Inputs section below).
  5. Задержка перед отправкой аутпута.
  6. Поставте здесь галочку что бы послать аутпут только один раз.

Простейшие аутпуты

  • OnTrigger — посылает аутпут после активации.
  • OnMapSpawn — посылает аутпут после загрузки карты.
  • OnNewGame — посылает аутпут после начала новой игры.
  • OnLoadGame — посылает аутпут после загрузки сохранения.




Input

Инпуты соединяются с аутпутами любого типа. Во вкладке Input можно увидеть все подключенные инпуты для выбранной энтити.

Так как любой аутпут может соединяться с любым инпутом это позволяет создавать сложные комбинации взаимодействия энтити. С помощью одних только таймеров можно включать/выключать свет, проигрывать звук и различные другие эффекты, не применяя другие энтити. Нажав кнопку "Mark" или двойной щелчёк по элементу в списке переместит вас к энтити которой пренадлежит аутпут.

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










Аутпуты и значения

Аутпутами некоторых энтити являются числовые значения, как в случае с OutValue аутпутом math_counter'а. These outputs are linked to inputs that take a parameter, and will fill in a value for that parameter when triggered. Например math_counter может иметь следующий инпут: OutValue mover SetPosition <none> где "mover" имя func_movelinear. Позиция mover может изменяться с помощью простейших арифметических операций math_counter.

Простейший триггер

Этот пример покажет как использовать инпуты/аутпуты в случае с триггером войдя в который будет проигрываться звук.

Откройте карту и добавте на неё ambient_generic (назовите его "ambient_1"). В настройках укажите файл который нужно проиграть, установите выключенное начальное состояние. Затем разместите на карте браш закрашенный текстурой "toolstrigger", обратите его в trigger_once энтити. Перейдите на вкладку Outputs и нажмите кнопку "Add...".

Установите параметр "My output named" на "OnStartTouch". Это означает что аутпут быдет послан когда игрок войдёт в браш триггера.

Укажите имя энтити которая будет проигрывать звук в параметре "Targets entities named", она у нас называется "ambient_1".

В параметре "Via this input" укажите "PlaySound". Это означает что ambient_generic должен проиграть звук.

.