Na linguagem Verse existe um tipo chamado Option que permite que uma variável tenha um valor ou fique vazia.
Um Option é definido usando "?" na frente do tipo. A linha abaixo define uma variável chamada MaybeGrade que é um Option do tipo inteiro.
var MaybeGrade : ?int = false
O valor false indica que o Option está vazio. É comum iniciar o nome das variáveis do tipo Option com Maybe porque já indica que ela pode ter um valor ou estar vazia.
Você pode estar pensando que poderíamos ter apenas usado o valor 0 na variável para indicar que ela não tem valor. Entretanto isso pode confundir. Como vamos saber se o valor 0 indica que uma nota (grade) ainda não foi atribuída ou se o valor da nota foi realmente 0.
O código a seguir mostra como atribuir um valor a um Option:
set MaybeGrade = option{ 8 }
Dentro do { } pode ter qualquer tipo de expressão. Se a expressão falhar, o Option ficará com false indicando que está vazio.
Para acessar o valor armazenado em um Option, é preciso usar o operador ? dentro de um contexto de falha (como o if).
if (Grade := MaybeGrade?):
Print("Grade = {Grade}")
O Print só será executado se MaybeGrade tiver um valor.
Vamos criar um dispositivo no UEFN com um exemplo de uso do Option. Este exemplo irá simular um desafio. Imagine uma corrida de obstáculos. Os agentes (jogadores) tem um tempo limitado para superar os obstáculos e pressionar um botão.
Usaremos uma variável Option com o nome MaybeBestAgent para guardar o primeiro agente que conseguir pressionar o botão. Se nenhum agente conseguir pressionar o botão antes do tempo acabar, o Option MaybeBestAgent continuará vazio.
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 option_device e clique no botão Create Empty.
Copie o código Verse abaixo para o dispositivo option_device:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
option_device := class(creative_device):
var MaybeBestAgent : ?agent = false
@editable
Button : button_device = button_device{}
@editable
TimerDevice : timer_device = timer_device{}
@editable
ScoreManagerDevice : score_manager_device = score_manager_device{}
OnBegin<override>()<suspends>:void=
Button.InteractedWithEvent.Subscribe(ButtonPressed)
TimerDevice.SuccessEvent.Subscribe(HandleTimerFinished)
ButtonPressed(Agent:agent):void=
# Guarda o primeiro agente que pressionar o botão
if ( not MaybeBestAgent? ):
set MaybeBestAgent = option{ Agent }
HandleTimerFinished(MaybeAgent:?agent):void=
# Verifica se algum agente conseguiu pressionar o botão antes do tempo acabar
if(BestAgent := MaybeBestAgent?):
ScoreManagerDevice.Activate(BestAgent)
else:
Print("Ninguém venceu o desafio!")
Estão sendo usados os dispositivos button_device, timer_device e score_manager_device.
A função ButtonPressed() será executada quando um agente pressionar o button_device. Ela irá guardar o agente se o Option MaybeBestAgent ainda estiver vazio.
A função HandleTimerFinished() será executada quanto o Timer terminar a contagem. Se o Option MaybeBestAgent possuir um agente, ele receberá uma pontuação.
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 Verse option_device ao nível. Adicione também os dispositivos button_device, timer_device e score_manager_device. Lembre-se que estamos apenas simulando o desafio.
Selecione o Score Manager no nível. Na aba Details defina o Score Value que o vencedor do desafio irá receber.
Selecione o Timer Device no nível. Na aba Details defina o tempo em segundos do timer na variável Duration. Marque o checkbox do Start at Game Start para iniciar o Timer automaticamente.
Por último selecione o nosso Option Device no nível. Na aba Details adicione as referências para os dispositivos que vamos usar.
Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Você pode pressionar o botão para receber a pontuação ou aguardar o Timer finalizar para ver a mensagem de que ninguém venceu o desafio.