Flow Control (Контроль потока)

Операции Flow Control (далее контроль потока) позволяют контролировать поток исполнения прямо в Blueprint’ах. Этот контроль может выражаться в форме выбора одной ветви графа для реализации, основываясь на условиях в значении  true, реализации множества ветвей в определенном порядке и т.д. Дефолтные операции контроля потока включают ветви (если есть), циклы, шлюзы  и последовательности.

Узлы-переключатели (Switch Nodes)

Узел-переключатель вчитывается в инпут данных и, основываясь на значение этого инпута, пересылает поток исполнения из парного (или опционального дефолтного) аутпута исполнения.

Доступно несколько типов переключений: Int, String, Name и Enum.

В общем, переключатели имеют инпут исполнения и инпут данных для типа данных, которые они оценивают. Все аутпуты – это аутпуты исполнения. Переключатели Enum автоматически генерируют выходные пины исполнения из свойств  Enum, в то время как переключатели Int, String, иName имеют выходные пины исполнения, доступные для кастомизации.

Редактирование узлов-переключателей (Switch Nodes)

Если  узел-переключатель Int, String или Name добавлен к  Blueprint, то единственный доступный пин исполнения – это Default. Выходной пин исполнения  Default будет задействован, если инпут не сможет найти пару среди других специализированных  выходных пинов. Он может быть удален либо правым кликом на пине и выбором Remove Execution Pin, либо  убиранием галочки с опции Has Default Pin в табе Details узла-переключения

Редактирование переключателя  Int:

  1. Выберете узел-переключатель в табе Graph, чтоб привнести его  в таб Details.
  2. Измените  Start Index на более низкую целую переменную, которую вы хотите  проверить.
  3. Кликаем на Add Pin узла-переключателя, чтоб добавить пин с вашим значением Start Index.

Клики по Add Pin в дальнейшем добавят больше пинов  с переменной, которая будет увеличиваться на 1 каждый раз. Чтоб удалить пин исполнения, выполните правый клик на пине и выберете Remove Execution Pin. Заметим, что удаление выходного пина исполнения  на узле  Switch on Int  станет причиной того, что любые пины с более высокими значениями  увеличат свои значения на  1, чтоб заполнить образовавшийся  пробел.

Редактирование  переключателя Name или  String:

  1. Выберете узел-переключатель в табе Graph, чтоб привнести его свойства в таб  Details.
  2. Кликните на иконку , справа от   Pin Names.
  3. В текстовом боксе, который появится, впечатайте значение, с которым вы хотели бы сравнивать  ваш String или Name.

Повторите процесс для любых пинов, которые хотите добавить. Пины также можно дублировать, вклеивать или удалять, кликнув на иконку   желаемого пина в табе Details. Чтоб удалить пин исполнения, вы также можете выполнить правый клик на пине и выбрать   Remove Execution Pin.

Стандартные узлы контроля потока

Эти узлы предоставляют доступ к различным переменным, которые призваны контролировать поток исполнения.

Branch

Узел Branch представляет собой простой способ создания потока, основанного на решении, которое исходит из единичного  условия true/false. При своем исполнении узел  Branch смотрит в приходящее значение прикрепленного Boolean и выводит исполняющий импульс вниз по необходимому аутпуту.

В этом простом примере branch проверяет текущий статус переменной boolean. Если она стоит в значении  true, то цвет огонька меняется на красный, если – false, то – на голубой.

Описание

Входные пины

(Unlabeled) – Инпут исполнения приводит в действие branch-проверку.
Condition – Принимает значение Boolean, которое используется для индикации того, какой выводящий пин будет задействован

Выходные пины

True – Выводит импульс исполнения, если входящее условие находится в значении true.
False – Выводит импульс исполнения, если входящее условие находится в значении  false.

DoN

Узел  DoN задействует импульс исполнения N количество раз. После того, как лимит будет исчерпан, то он прекратит все выходные исполнения до того момента, когда  импульс будет послан в свой инпут Reset

Например, у вас может быть транспортное средство, которое можно завести только 20 раз, а затем оно больше не заводится до следующей заправки, которая связана с активированным инпутом Reset.

Описание

Выходные пины

Enter- Этот инпут исполнения задействует DoN-проверку.
n – Этот инпут отвечает за количество раз, которые можно запустить узел DoN.
Reset – Этот инпут исполнения перезапустит узел DoN, чтоб его можно было задействовать снова

Выходные пины

Exit – Этот пин исполнения запускается только тогда, когда DoN, еще не был задействован больше, чем  N раз, или если был вызван инпут Reset

DoOnce

Узел DoOnce, как можно догадаться по его названию, запускает импульс исполнения всего один раз. Таким образом он остановит все исходящие исполнения до того момента, как импульс будет послан  в его инпут Reset . Этот узел служит эквивалентом узла DoN, где  N = 1.

Например, у вас может быть сеть для открывания двери, которая идет через DoOnce, и эту дверь можно будет открыть лишь один раз. Более того, вы можете привязать событие-тригер к Reset, что приведет к тому, что дверь будет доступна при активном триггере.

Описание

Входные пины

(Unlabeled) – Этот инпут исполнения задействует DoOnce-проверку.
Reset – Этот инпут исполнения перезапустит узел DoOnce, чтоб его можно было запустить опять

Выходные пины

Completed – Этот пин исполнения задействуется только, если DoOnce еще не был запущен или если инпут Reset был вызван.

FlipFlop

Узел  FlipFlop  принимается в аутпут исполнения и переключает ползунок между двумя аутпутами исполнения. При первом вызове, аутпут A исполняется. При втором вызове исполняется B. Затем  A,затем  B, и так далее. У узла также есть аутпут Boolean, позволяющий вам отследить, когда вызывается аутпут  A.

Описание

Входные пины

(Unlabeled) – Этот инпут исполнения задействует FlipFlop.

Выходные пины
A – Этот выводной пин вызывается первый и каждый нечетный раз, после того, как FlipFlop был задействован
B – Этот выходной пин вызывается второй и каждый четный раз, после того, как FlipFlop был задействован
Is A – Выводит значение  Boolean, которое сигнализирует, о том был ли задействован аутпут.  A это в свою очередь включает ползунок между true и false каждый раз, когда задействован узел  FlipFlop.

ForLoop

Узел  ForLoop работает как стандартный замкнутый код, включая импульс исполнения для каждого значения показателя между  start и end.

В этом простом примере цикл задействуется, когда игрок соприкасается с простым триггером уровня. Цикл будет повторяться  10 раз, каждый раз вызывая Print String с записью сообщения prefix во время каждого повторения.

Повторение Loop имеет место быть между фреймами, так что крупные циклы могут привести к оптимальной производительности.

Описание

Входные пины

(Unlabeled) – Этот инпут исполнения запускает цикл
First Index – Принимается в Int, представляя первый  показатель цикла
Last Index – Принимается в Int, представляя последний  показатель цикла.

Выходные пины

Loop Body – Выводит импульс исполнения в каждом повторении цикла, так как двигается между показателями
Index – Выводит текущий показатель цикла
Completed – Этот стандартный выходной пин исполнения, который задействуется, когда цикл завершен.

ForLoopWithBreak

Узел  ForLoopWithBreak работает практически также, как узел  ForLoop, за тем лишь исключением, что он включает входной пин, позволяющий разорвать цикл.

В этом примере цикл задействуется, когда игрок соприкасается с простым триггером уровня. Цикл повторяется 1,000 раз, каждый раз включая Branch для проверки того, достигнут  цикл, состоящий из 500 повторений. Если искомое количество повторений еще не достигнуто, то на экране выведется достигнутое количество повторений. Как только насчитается 500 повторений, Branch вызовет Custom Event, которое, в свою очередь, разорвет цикл. Custom Event используется для визуальной ясности и для ликвидации необходимости тянуть обратную связь к входному пину Break.

Повторения Loop имеет место быть между фреймами, так что крупные циклы могут привести к оптимальной производительности.

Описание

Входной пин

(Unlabeled) – Этот инпут исполнения запускает цикл
First Index – Принимает Int, представляя первый  показатель цикла
Last Index – Принимает  Int, представляя последний  показатель цикла.
Break – Этот инпут исполнения разрывает цикл

Выходной пин

Loop Body – Выводит импульс исполнения при каждом повторении цикла, при движении между показателями.
Index – Выводит текущий показатель цикла
Completed – Этот стандартный выходной пин исполнения, который задействуется, когда цикл завершен.

Gate

Узел  Gate представляет собой способ закрывать и открывать поток исполнения. Просто поместите инпут Enter в импульсы исполнения и текущее состояние входного шлюза (закрыто или открыто) определит, выходят ли эти импульсы из аутпута Exit или нет.

В этом простом примере у нас есть временная шкала, на которой нет треков, но активированы автопроигрывание и цикличность. Она обновляет входной пин  Enter шлюза. В уровне есть два триггера. Один триггер открывает шлюз, второй закрывает его. Если шлюз открыт, то импульсы исполнения оставляют пин Exit, и вызывается  Print String, которая печатает сообщение на экране. Как только игрок коснется триггера Close, шлюз закроется, и сообщение перестанет отображаться. Если он затем дотронется до триггера  Open, то сообщение снова начнет выводится.

Описание

Входные пины

Enter – Этот инпут исполнения представляет любое исполнение, которое контролируется шлюзом
Open – Этот пин исполнения задает состояние шлюза, когда тот открыт, позволяя импульсам исполнения проходить через выходной пин Exit.
Close – Этот пин исполнения задает состояние шлюза, когда тот закрыт, не позволяя импульсам исполнения проходить через выходной пин Exit.
Toggle – Этот пин исполнения отменяет текущее состояние шлюза.  Открытый шлюз  становится закрытым и так далее.
Start Closed – Этот инпут  boolean определяет стартовое состояние шлюза. Если значение true, то шлюз стартует в закрытом состоянии

Выходные пины
Exit – Если текущий статус шлюза open, любые импульсы исполнения, которые достигают входного пина Enter, станут причиной того, что импульс покинет выводной пин  Exit. Если шлюз закрыт, то пин Exit не будет функционировать.

MultiGate

Узел  MultiGate принимает единичный импульс данных и маршрутизирует к любому количеству потенциальных аутпутов. Он может проявлятся фрагментарно, рандомно и  быть или не быть циклом.

В этом примере зацикленная временная шкала с автовоспроизведением выводит импульс каждые полсекунды.  Этот импульс касается MultiGate и маршрутизируется, соответственно задействовав одну из серий узлов Print String, которые, когда проигрываются по порядку, выводят определенное сообщение.

Описание

Входные пины
(Unlabeled) – Этот первостепенный инпут исполнения, принимающий  любые импульсы, которые нужно маршрутизировать с помощью этого MultiGate.
Reset – Возвращает  текущий выходной показатель  в значение 0 по умолчанию или в текущее состояние Start Index, если оно не в значении  -1.
Is Random – Если принимает значение  true, то аутпуты будут выбираться в случайном порядке
Loop – Если принимает значение   true, то аутпуты  будут постоянно повторяться в качестве цикла. Если принимает false, то MultiGate прекращает функцию, которая использовалась всеми аутпутами
Start Index
Принимает Int, чтоб представить выходной показатель, который  MultiGate должен использовать первым. Значение -1 – это то же самое, что и не определенная стартовая точка.

Выходные пины

Out # – Каждый аутпут представляет возможный выводной пин, который MultiGate может использовать для отсылки маршрутизированного импульса исполнения.
Add pin – С помощью этого не совсем выходного пина эта кнопка позволяет вам добавить любое количество аутпутов. Аутпуты можно удалить, выполнив правый клик и выбрав Remove Output Pin.

Sequence

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

В этом примере sequence-узел вызывается в начале уровня, а затем запускает  5 узлов Print String по порядку. Как бы то ни было, без значимой задержки будет казаться, что сообщения будут появляться почти в одно и то же время.

Описание

Входные пины

(Unlabeled) – Это первостепенный инпут исполнения, который принимает любые импульсы, которые нужно маршрутизировать с помощью этого Sequence.

Выходные пины

Out # – Каждый аутпут представляет возможный выводной пин, который Sequence может использовать для отсылки маршрутизированного импульса исполнения.
Add pin – С помощью этого не совсем выходного пина эта кнопка позволяет вам добавить любое количество аутпутов. Аутпуты можно удалить, выполнив правый клик и выбрав Remove Output Pin.

WhileLoop

Узел WhileLoop будет выводит результат, пока определенное условие стоит в значении true. В течение каждого повторения, он проверяет текущий статус входной переменной boolean. Если прочитано false, то цикл разрывается.

В этом примере  WhileLoop используется вместе с  сетью целых повторений для подсчета количество раз, которые был запущен цикл. По достижении 10-го повторения, test boolean примет значение  false, прекратив поведение цикла.

В случаях употребления  While loops в языках программирования, вы должны особо позаботиться о предотвращении появления бесконечных циклов.

Описание

Входные пины

(Unlabeled) – Это первостепенный инпут исполнения, который принимает любые импульсы, которые включают этот WhileLoop.

Выходные пины

Loop Body – Выводит импульс исполнения на каждом повторении цикла во время движения между показателями
Completed – Это стандартный выходной пин исполнения, который задействуется, как только заканчивается цикл.