Eventos são usados como uma forma de comunicação entre os elementos de um jogo. Os dispositivos criativos possuem diversos eventos e é possível criar eventos em nossos dispositivos usando a linguagem verse.
Para criar um evento com o nome MyEvent, faça assim:
MyEvent<public>:event() = event(){}
O evento pode ter parâmetros. Para definir um evento com parâmetros é preciso informar os tipos dos parâmetros. O exemplo abaixo define um evento com um parâmetro do tipo int (inteiro):
MyEventWithParameter<public>:event(int) = event(int){}
Para ativar o evento use a função Signal() do evento:
MyEvent.Signal()
Em um contexto assíncrono, use a função Await() do evento para esperar até que o evento seja ativado:
MyEvent.Await()
No momento da escrita deste artigo, a classe event não tem a interface subscribable. Isto significa que não é possível registrar uma função para ser chamada quando o evento for ativado.
Talvez isto seja uma estratégia da Epic Games para que os programadores se adaptem à programação concorrente usando o Await().
Vamos fazer um exemplo para ilustrar o uso de eventos. Será criado um dispositivo com o nome trigger_group_device que possui um array de trigger_device.
Este dispositivo possuirá um evento chamado AllTriggersActivated que será ativado quando todas as trigger_device do array forem ativadas. É uma implementação simples que assume que cada trigger_device só pode ser ativada uma vez.
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 trigger_group_device e clique no botão Create Empty.
Copie o código Verse abaixo para o dispositivo trigger_group_device:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
trigger_group_device := class(creative_device):
@editable
TriggerGroup : []trigger_device = array{}
var NumberOfTriggers : int = 0
var TriggersActivated : int = 0
# Criando o evento
AllTriggersActivated<public>:event(?agent) = event(?agent){}
OnBegin<override>()<suspends>:void=
set NumberOfTriggers = TriggerGroup.Length
for (Trigger : TriggerGroup):
Trigger.TriggeredEvent.Subscribe(OnTriggerActivated)
OnTriggerActivated( MaybeAgent:?agent ):void=
set TriggersActivated += 1
if (TriggersActivated = NumberOfTriggers):
# Ativando o evento
AllTriggersActivated.Signal(MaybeAgent)
O trigger_device possui o evento TriggeredEvent. Na função OnBegin é usado o laço for para iterar no array e registrar a função OnTriggerActivated() no evento TriggeredEvent de cada trigger.
Quando o jogador ativar uma trigger, a função OnTriggerActivated() será chamada que aumenta o contador de triggers ativadas e compara com o numero total de triggers. O evento AllTriggersActivated é ativado quando todas as triggers forem ativadas.
Salve o arquivo e compile o código Verse usando a opção Verse > Build Verse Code do menu do UEFN.
Vamos criar outro dispositivo que irá aguardar a ativação do evento AllTriggersActivated para gerar um item usando o Item Spawner device.
No 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 event_device e clique no botão Create Empty.
Copie o código Verse abaixo para o dispositivo event_device:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
event_device := class(creative_device):
@editable
TriggerGroupDevice : trigger_group_device = trigger_group_device{}
@editable
ItemSpawnerDevice : item_spawner_device = item_spawner_device{}
OnBegin<override>()<suspends>:void=
TriggerGroupDevice.AllTriggersActivated.Await()
ItemSpawnerDevice.SpawnItem()
Na função OnBegin() é usado a função Await() do evento AllTriggersActivated que espera até sua ativação. Após a ativação, será executada a função SpawnItem() do ItemSpawnerDevice.
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 os dispositivos trigger_group_device e event_device ao nível.
Adicione quatro Trigger Device no nível. Selecione os Trigger Device e na aba Details procure pela propriedade Times Can Trigger. Marque esta propriedade e mantenha o valor 1 para que cada Trigger Device seja ativado somente uma vez.
Adicione um Item Spawner no nível. Ele será usado para gerar uma recompensa para o jogador depois que ele ativar todas os Trigger Device. Na aba Details, desmarque as propriedades Spawn Item on Timer e Respawn Item on Timer.
Para definir o item que será gerado, clique no botão + na linha do Item List. Em Pickup to Spawn, selecione o item que será gerado. Eu usei o Mythic Goldfish.
Selecione o trigger_group_device no nível. Na aba Details adicione 4 elementos no array TriggerGroup. Para cada elemento, selecione uma instância de Trigger Device.
Selecione o event_device no nível. Na aba Details adicione as referências do trigger group device e do Item Spawner device.
Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Passe por cima de todas as triggers para gerar o item no Item Spawner.