Case é uma expressão de controle de fluxo que compara um valor a uma lista de opções para decidir qual bloco de código deve ser executado.
No exemplo abaixo, Mode é uma variável do tipo string. Existem blocos de código associados aos valores "EASY", "NORMAL" e "HARD". O símbolo _ representa o bloco default que será executado caso o valor de Mode não tenha um bloco associado.
case (Mode):
"EASY" =>
set NumberOfEnemies = 15
Print("Easy mode selected")
"NORMAL" =>
set NumberOfEnemies = 25
Print("Normal mode selected")
"HARD" =>
set NumberOfEnemies = 35
Print("Hard mode selected")
_ =>
Print("Mode is invalid")
A expressão usada no teste do Case pode ser dos tipos int, logic, string, char e enum. No artigo sobre enum (enumeração) veremos como usar o Case com enum.
Para demonstrar o uso do Case, vamos criar um dispositivo que funcionará como um gerador de mensagens da sorte. O dispositivo terá referências para um button device e um billboard device. Quando o jogador pressionar o botão, será selecionada uma das mensagens e exibida no billboard (quadro de aviso).
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 case_device e clique no botão Create Empty.
Copie o código Verse abaixo para o dispositivo case_device:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Random }
case_device := class(creative_device):
@editable
BillboardDevice : billboard_device = billboard_device{}
@editable
ButtonDevice : button_device = button_device{}
var IndexOfMessage : int = 0
var FortuneString : string = ""
OnBegin<override>()<suspends>:void=
loop:
ButtonDevice.InteractedWithEvent.Await()
set IndexOfMessage = GetRandomInt(1, 5)
set FortuneString = case (IndexOfMessage):
1 => "A journey of a thousand miles begins with a single step."
2 => "One bad chapter doesn't mean your story is over."
3 => "It is easier to stay out than to get out."
4 => "Experience is the best teacher."
5 => "Try and fail, but never fail to try."
_ => "Message not found."
BillboardDevice.SetText( ConvertToMessage(FortuneString) )
Sleep(2.0)
ConvertToMessage<localizes>(StringValue:string) : message = "{StringValue}"
Na função OnBegin tem um loop. A primeira expressão dentro do loop fica esperando até que o jogador interaja com o botão. Após a interação com o botão é gerado um número aleatório de 1 a 5 que é armazenado em IndexOfMessage e usado como expressão de teste no case.
Cada um dos blocos do case resulta em uma string que será armazenada na variável FortuneString. A função SetText() do BillboardDevice recebe como parâmetro uma message, por isso foi preciso fazer a função ConvertToMessage() para converter de string para message.
A função Sleep() é usada para fazer uma pausa de 2 segundos antes de reiniciar o loop e esperar novamente que o jogador pressione o botão para ver outra mensagem.
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 dispositivo case_device ao nível. Adicione um Button Device e um Billboard Device no nível. Selecione o Billboard Device e na aba Details marque o campo Show Border para que o billboard fique visível no nível.
Selecione o case_device no nível. Na aba Details adicione as referências do Billboar Device e do Button Device.
Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Interaja com o botão para exibir uma das mensagens no Billboard. Pressione novamente para ver outra mensagem.