Ru/Inputs and Outputs

Одно из наиболее главных изменений для создания карт для движка Source были энтити I/O. Тогда как в старой версии движка полагались на ключевые поля target и targetname,которые отправляли простой импульс энтити, система I/O энтити позволяет более сложное взаимодействие между энтитями. Это делается с помощью input'ов и output'ов, между которыми есть связи. Используя этот простой метод, энтити могут легко переключать события, основанные на изменениях состояния, и работать в связке с другими энтитями в более крошечном, логическом и мощном пути, который ранее был невозможен.
==Обзор==
Энтити содержат два метода для связи: отправляя output другой энтити, или получая input из другой энтити. Одна энтити может отправить output, когда она убита другой энтити, input которой приведет к изменению цвета. Тот же output может использоваться для активации input'а создания(Spawning) другой энтити. Output'ы сопоставляются с input'ами через соединения, которые определяют, какие дополнительные данные пересылаются получателю, как долго они задерживаются до того как output получены, и должно ли быть позволено output отправлять запрос позже. Output'ы могут быть связаны с любыми input и наоборот. Это позволяет создавать сложные и мощные взаимодействия между энтитями.
Например, энтити может отправить OnTimer output, которая сработает, когда временное событие сработает для энтити. Output может быть обработан input'ом Show в энтити, что сделает её видимой, когда таймер достигнет его назначенного времени. Вы также можете обработать OnTimer output того же таймера (), привязав к input'у SparkOnce энтити , что приведет к испусканию искр. Используя свойства соединения, вы также можете сделать, чтобы output срабатывал после двухсекундной задержки или только один раз.
Для пользователей, использовавших метод связи энтитей оригинального Half-Life , поля targetname и target теперь устарели, и I/O система энтитей обладает расширенной функциональностью. Вместо использования энтити , только срабатывающей для одной энтити назначения, теперь можно использовать любое кол-во его output'ов, чтобы делать то же, включая: OnStartTouch, OnEndTouch, OnTouch и т.д. Эти output'ы могут быть подсоединены к произвольному числу энтитей, с уникальной задержкой на output, делающие мульти-менеджеры устарелыми. Также поле killtarget теперь заменено соединением output'а Kill к input'у другой энтити.
==Output'ы==
Output'ы - это события, которые срабатывают, когда изменяется состояние энтити. Это может быть таймер, достигнувший конечного значения, нажатая кнопка или дверь, которая закрылась. Любое кол-во output'ов может быть указано программистом внутри энтити, срабатываемых при любом кол-ве критериев. Output'ы указываются на вкладке Outputs свойств энтити. Вкладка Outputs диалога отображает все output'ы, связывающие энтитю с другой энтитей.
# Имя срабатываемого output'а.
# Имя энтити получаемой output (щёлкните на этитю с помощью инструмента Eye Dropper, чтобы вставить его имя сюда).
# Введите в другой энтите, которая получит output. Вы должны выбрать, какое действие целевой энтити должно активировать output. К примеру, если вы хотите, чтобы солдат спускался на верёвке, вы должны использовать Input BeginRappel.
# Используется перегрузка параметра, если данные приняты input'ом назначения. Чаще это число, используемое input функцией (смотрите секцию Input'ов ниже).
# Установите задержку отправки output'а (в секундах). 1/10 секунды записывается как "0.1" сек.
# Срабатывает ли output единожды.
===Пример output'ов===
* OnTrigger - Когда энтитя пересекается, она генерирует этот output.
* OnMapSpawn - Когда карта будет загружена, этот output срабатывает.
==Input'ы==
Input'ы присоединяются к output'ам любого типа. Здесь мы видим вкладку Inputs диалога . Она отображает все output'ы, которые подсоединены из других энтитей к этой энтити.
Так как любой output может быть подсоединён к любому input'у, это множество комбинаций может быть использовано для создания сложных взаимодействий. Таймеры могут создавать последовательность обратного отсчёта, используя мигающие спрайты, звуки и специальные эффекты, - и всё это без дополнительных энтитей. Щёлкнув на кнопку Mark или два раза щёлкнув на записи в списке, пользователь может перейти к энтити, отправляющей output в данный input.
Если соединение отображается красным, оно неправильно. Это означает, что output не существует в исходной энтити или input не существует в энтити назначения. Неправильное соединение не смертельно, но должно быть устранено до компиляции карты, так как команда меню выдаст это как ошибку.
==Output'ы со значениями==
Очень мало output'ов, которые возвращают значения. К примеру 'а OutValue output. Эти output'ы привязаны к input'ам, которые требуют параметр и будут заполнять значение для этого параметра когда сработает. К примеру, для может быть следующий input: OutValue mover SetPosition <none> где mover это . Позиция mover может быть изменена с помощью простых арифметических операций 'а.
== Создание простого триггера ==
Вот пример, как создать простой триггер, используя input'ы и output'ы. Как только игрок войдёт в определённую зону, воспроизведётся звук.
Создайте карту и добавьте энтити. Назовите её "ambient_1". Зайдите в её свойства и выберите звуковой файл для воспроизведения. Убедитесь, что во флагах стоит "Starts Off". Выберите текстуру "toolstrigger" и создайте прямоугольный браш. Щёлкните правой кнопкой мыши и выберите в меню "". В свойствах выберите trigger_once энтити. Во вкладке "Outputs" нажмите кнопку "Add..."
Выберите в "My output named" вариант "OnStartTouch". Это создаст output (и это триггер) при соприкосновении игрока и браша в игре.
В "Targets entities named" напишите "ambient_1". Триггер будет ссылаться на энтити ambient_generic, которую вы создали раньше.
Выберите "PlaySound" в списке "Via this input". Это выберет действие для энтити ambient_generic при создании output'а, и это действие вызовет воспроизведение звука.
Нажмите клавишу "Apply", чтобы сохранить изменения в триггере и закройте его. Теперь у нас есть триггер, настроенный на прикосновение игрока и вызывающий команду ambient_generic, которая начинает воспроизводить звук.
Если вы откроете свойства ambient_generic, вы можете увидеть, что Output триггера автоматически превратился в Input для ambient_generic.
Перед проверкой вашего триггера в игре, убедитесь, что все основные энтити и браши(точка старта игрока, освещение и т.п.) установлены, и вы задали звук для ambient_generic
==Отладка==
Так как природа того, как энтити связаны, более сложная и мощная, поэтому в движке имеются возможности для отладки, чтобы помочь вам отследить проблемы. Если цепочка I/O логики не работает как ожидалось, инструменты, указанные ниже, вам сильно помогут устранить ошибку.
;developer 0/1/2
:Установив в значение "2", вы получите подробный отчет о том, как энтити взаимодействуют с помощью системы I/O энтитей. Это полезно для определения, какое точно место занимает цепочка событий в сложных взаимодействиях.
;ent_messages_draw 0/1
:При значении "1", в игре будет отображаться визуальная информация о том, как энтити взаимосвязаны между собой. Это очень похоже на использование developer, но иногда даёт более быстрый и интуитивный результат.
;ent_fire <entity name> <input name> <input value>
:Эта позволяет вам вручную вызывать input'ы энтити из консоли. Это бывает очень полезно для тестирования настроек энтитей в реальном времени. Чтобы вызвать input под названием "Open" для энтити с именем "testentity" с параметром input "3", вы должны ввести ent_fire testentity open 3
;ent_pause
:Эта приостанавливает энтити карты. Если мы введём снова, энтитям будет возвращено их обыкновенное поведение. Она наиболее полезна с использованием вместе с ent_step, описанной ниже.
;ent_step <number of steps>
:Когда используется вместе с ent_pause, эта позволяет пользователю замедлить шаги, через которые цепочка энтитей исполняется для input'а и output'а. Любое кол-во шагов может быть выполнено в одно время, что указывается в значение введённым после (например ent_step 3 исполнит 3 шага сразу же).
==Смотрите также==
* Все о Outputs/Inputs
* 
* 
*