segunda-feira, 17 de fevereiro de 2025

UEFN Verse: Map (pt-BR)

Um Map permite o armazenado de pares chave->valor. Isto é usado para fazer associação entre valores. O exemplo abaixo cria uma variável Map usando string para o tipo da chave e int (inteiro) para o tipo do valor.

var HealthItemSizes : [string]int = map{"small" => 25, "medium" => 50, "big" => 75, "mega" => 100}

Para consultar um valor associado a uma chave no Map, use a chave dentro de []  como mostra o exemplo abaixo. O acesso a um valor em um Map é uma expressão falível.

if(Points := HealthItemSizes["medium"]):
    Print("The medium Health Item recovers {Points} health points.")

Você pode adicionar elementos em uma variável Map usando o set com uma nova chave. Se a chave usada já existir no Map, o valor associada a esta chave será atualizado.

if(set HealthItemSizes["ultra"] = 150):
    Print("Size ultra added to the map.")

A quantidade de elementos de um Map pode ser acessada usando a propriedade Length.

Print("Number of elements in the Map: {HealthItemSizes.Length}")

O laço For pode ser utilizado para percorrer os elementos de um Map como mostra o exemplo a seguir. A cada iteração do laço For, a chave e o valor de um elemento do Map são armazenados em Key e Value.

for (Key->Value : HealthItemSizes):
    Print("Size: {Key} | Points: {Value}")

Vamos criar um dispositivo no UEFN para mostrar estes conceitos do Map. 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 map_device clique no botão Create Empty.

Copie o código Verse abaixo para o dispositivo map_device:

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

map_device := class(creative_device):

    @editable
    HealthExtended : logic = true

    var HealthItemSizes : [string]int = map{"small" => 25, "medium" => 50, "big" => 75, "mega" => 100}

    OnBegin<override>()<suspends>:void=

        if(HealthExtended?):        
            if(set HealthItemSizes["ultra"] = 150, set HealthItemSizes["monster"] = 200):
                Print("Health Extended elements added to the map.")
            
        Print("The medium Health Item recovers {GetHealthItemPoints("medium")} health points.")
        
        Print("------- MAP CONTENTS -------")

        for (Key->Value : HealthItemSizes):
            Print("Size: {Key} | Points: {Value}")

        Print("Number of elements in the Map: {HealthItemSizes.Length}")

    GetHealthItemPoints(Size:string):int=

        if(Points := HealthItemSizes[Size]):
            Points
        else:
            0

    # O comando return é opcional. A função retorna o resultado da última expressão executada.


A constante HealthExtended pode ser editada no editor do UEFN. Ela está sendo usada para adicionar outros elementos no Map.

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 map_device ao nível. 

Clique no botão Launch Session localizado na barra de ferramentas do UEFN para carregar o nível no Fortnite. 

Após iniciar a partida no Fortnite, pressione a tecla Tab e selecione a aba Registro para visualizar o log com as mensagens escritas pelas funções Print.


Sumário Verse