Se já conhece a Vinculação Direta de Evento, o conceito de eventos e funções com o qual você está acostumado a trabalhar em dispositivos do Modo Criativo também é aplicável em Verse. Você pode usar a linguagem Verse para codificar suas próprias funções e comportamentos executados quando ocorrem eventos!
As seções a seguir descrevem as diferentes maneiras de trabalhar com eventos de dispositivos do Modo Criativo em Verse e codificar sua própria lógica.
Como vincular funções a eventos de dispositivos do Modo Criativo
Você pode assinar eventos que são expostos por dispositivos do Modo Criativo em suas APIs. Por exemplo, a classe button_device do dispositivo Botão expõe InteractedWithEvent, que ocorre sempre que o jogador interage com o dispositivo Botão. Você pode chamar Subscribe() no evento e passar o identificador da função que deseja chamar sempre que esse evento for sinalizado.
Inscrever permite que você especifique uma função a ser chamada quando um evento é sinalizado, processo conhecido como vinculação a um evento. A função vinculada é chamada de manipulador. No exemplo abaixo, o manipulador é OnButtonInteractedWith.
Dependendo da definição do evento, a assinatura da função deve corresponder ao que o evento espera chamar. Por exemplo, ao inscrever-se no evento InteractedWithEvent para o button_device, espera-se receber uma função com um parâmetro do tipo agent. Então, a função OnButtonInteractedWith deve ficar assim:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
@editable
MyButtonDevice:button_device = button_device{}
OnBegin<override>()<suspends>:void=
# Bind OnButtonInteractedWith function to the InteractedWithEvent of the Button device
MyButtonDevice.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
Quando você chama Subscribe() no evento de um dispositivo, a função retorna um resultado cancelable (cancelável). Chamar Cancel() em uma variável cancelable cancela a assinatura da função que manipula o evento, fazendo com que a função não seja mais chamada quando o evento for sinalizado.
Se você quiser armazenar um único resultado cancelable, pode usar um contêiner como um option. Você não pode criar diretamente uma variável cancelable, mas pode configurar uma variável option para armazenar o resultado de uma inscrição.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
spawner_button := class(creative_device):
@editable
Button:button_device = button_device{}
# Container for storing the event subscription
var ButtonSubscription:?cancelable = false
Se o seu dispositivo Verse tiver várias inscrições de eventos, é uma boa ideia usar um contêiner como uma matriz para armazenar todos os resultados cancelable de cada inscrição de evento, de forma que você possa cancelá-los mais tarde. Como Subscribe() retorna um resultado cancelable, você pode definir os valores da matriz cancelable ao inscrever-se em eventos pela primeira vez.
Exemplo de geração de item quando o jogador pressiona um botão
Neste segmento, você aprenderá a criar um Gerador de Itens que gera seu item quando o jogador interage com um botão.
Comece posicionando um dispositivo Gerador de Itens e um dispositivo Botão no nível. Para saber como posicionar dispositivos no nível, consulte a seção "Posicionamento de Objetos" em Controles do UEFN para usuários do Modo Criativo.
Defina qual item será gerado no dispositivo Gerador de Itens. Consulte Gerador de Itens para obter mais detalhes.
Crie um dispositivo Verse com propriedades editáveis para o dispositivo Botão e o Gerador de Itens. Consulte Como adicionar uma referência de Verse a um dispositivo do Modo Criativo no seu nível.
Adicione uma variável da opção
cancelableao dispositivo para rastrear a inscrição do dispositivo Botão.Assine o
InteractedWithEvent, converta o resultado em umaoptione atribua-o à variávelButtonSubscription.No manipulador de eventos para
InteractedWithEvent, chameItemSpawner.SpawnItem(). A seguir, cancele a assinatura acessando o valor dentro da opção deButtonSubscriptione chamandoCancel().Veja a seguir o código completo em Verse para gerar um item quando o jogador interage com o dispositivo Botão. Interagir com o botão uma segunda vez não gerará outro item.
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } spawner_button := class(creative_device): @editable Button:button_device = button_device{} @editable ItemSpawner:item_spawner_device = item_spawner_device{}Comece seu jogo e interaja com o botão para gerar um item. Como você cancelou o
InteractedWithEvent, o botão deve gerar um item apenas uma vez.
Confira o Tutorial do Quebra-cabeça de Luzes Marcadas para ver um exemplo de jogo que usa os recursos de inscrição e cancelamento desse dispositivo!
Como aguardar um evento de dispositivo do Modo Criativo
Você pode assinar eventos, mas há outra maneira de aguardar a ocorrência de um evento. Você pode chamar Await() em um evento de dispositivo do Modo Criativo, que é uma chamada de função assíncrona e pode demorar um pouco para ser concluída. O que significa que você deve usá-la em um contexto assíncrono, como uma expressão de simultaneidade ou uma função com o especificador suspends. Para saber mais sobre simultaneidade, confira Fluxo de tempo e simultaneidade.
No exemplo a seguir, o dispositivo Verse espera que o jogador interaja com o dispositivo Gatilho antes que qualquer outra coisa possa ocorrer. Se ele interagir com qualquer um dos dispositivos Botão antes do Gatilho, nada acontecerá. Após o jogador interagir com o Gatilho, deverá escolher entre os dois botões. É possível interagir apenas com um dos botões e apenas uma vez para que algo ocorra, pois o código usa uma expressão race para percorrer os dois eventos do botão. Para obter mais detalhes sobre como funciona essa expressão de simultaneidade, consulte Race.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
make_a_choice_device:= class(creative_device):
@editable
MakeChoice:trigger_device = trigger_device{}
@editable
RedButton:button_device = button_device{}
Esses eventos esperam apenas uma vez. Se quiser repetir a espera por esses eventos, você pode usar uma expressão loop para repetir essa lógica quantas vezes quiser.
Próximo passo: módulo Dispositivos
Você aprendeu aqui como trabalhar com geradores de itens e botões, mas existem mais dispositivos do Modo Criativo que você pode usar e registrar em seu próprio dispositivo. Você pode encontrar essas informações na Referência da API da linguagem Verse. Acesse o módulo Dispositivos para ver todos os dispositivos do Modo Criativo com os quais pode trabalhar em Verse.