segunda-feira, 1 de setembro de 2025

UEFN Verse: Case (controle de fluxo)

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 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.