Fluxo de tempo na linguagem Verse se refere à concorrência entre as expressões assíncronas sendo possível especificar como elas se relacionam.
Sync é uma das expressões estruturadas assíncronas. Ela tem de ser usada em um contexto assíncrono que é uma função com o especificador suspends como a função OnBegin().
A expressão sync executa outras expressões simultaneamente e só finaliza quando todas as expressões em seu bloco finalizarem.
O código abaixo mostra um exemplo simples da expressão sync:
OnBegin<override>()<suspends>:void=
sync:
Trigger1.TriggeredEvent.Await()
Trigger2.TriggeredEvent.Await()
Trigger3.TriggeredEvent.Await()
Print("Os três Triggers foram ativados")
Trigger1, Trigger2 e Trigger3 são instâncias de trigger_device. A função Await() espera até que o evento seja ativado. A expressão sync finaliza quando os três triggers forem ativados.
Vamos criar um dispositivo no UEFN com este exemplo de sync. Em qualquer projeto UEFN, abra o Verse Explorer, clique com o botão-direito no nome do projeto e escolha a opção Add new Verse file to project.
Em Device Name coloque sync_device e clique no botão Create Empty.
Copie o código Verse abaixo para o dispositivo sync_device:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
sync_device := class(creative_device):
@editable
Explosive : explosive_device = explosive_device{}
@editable
Trigger1 : trigger_device = trigger_device{}
@editable
Trigger2 : trigger_device = trigger_device{}
@editable
Trigger3 : trigger_device = trigger_device{}
OnBegin<override>()<suspends>:void=
EventsOutput := sync:
Trigger1.TriggeredEvent.Await()
Trigger2.TriggeredEvent.Await()
Trigger3.TriggeredEvent.Await()
MaybeAgent := EventsOutput(0)
if(Agent := MaybeAgent?):
Explosive.Explode(Agent)
Este dispositivo possui referências para três trigger_device e um explosive_device. O explosivo será detonado quando os três triggers forem ativados.
No exemplo o EventsOutput está sendo usado para armazenar o retorno da expressão sync. O retorno da expressão sync é uma tupla contendo o retorno de cada função.
A função Await() retorna um ?agent (option agent) que precisa ser convertida para um agent para ser passado como parâmetro na função Explode().
Salve o arquivo e compile o código Verse usando a opção Verse > Build Verse Code do menu do UEFN.
Acesse o Content Drawer e adicione o nosso dispositivo sync_device ao nível. Adicione também três Trigger Device e um Explosive Device. Coloque o Explosive Device longe dos Trigger Device ou diminua o alcance da explosão para evitar que o jogador seja atingido.
Selecione o sync_device no nível. Na aba Details adicione as referências dos dispositivos.
Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Passe por cima dos três triggers para detonar o explosivo.