domingo, 19 de janeiro de 2025

UEFN Verse: Arrays (grupos de elementos)

Array é um container usado para guardar um grupo de elementos do mesmo tipo. Um array é definido usando [] na frente do tipo. O exemplo abaixo mostra a definição de um array com o nome BonusByLevel para armazenar valores inteiros. O array já está sendo inicializado com alguns valores. 

BonusByLevel : []int = array{10, 25, 50, 75, 100}

O acesso aos elementos de um array é feito por um índice que indica a posição do elemento. O primeiro elemento de um array fica armazenado no índice 0. O array possui a propriedade Length que guarda o número de elementos do array.

O código abaixo obtém o valor que está no índice 1 do array e armazena na constante Value. O resultado escrito na tela será 25.

if ( Value := BonusByLevel[1] ):
    Print("{Value}")

O acesso a um elemento em um array é uma expressão falível, por isso ele está sendo feito dentro do if().

Depois da inicialização de um array, seus valores não podem ser modificados. Para poder mudar os valores armazenados em um array, é preciso criar uma variável array como mostra este exemplo:

var BonusVariable : []int = array{50, 100, 150}
if ( set BonusVariable[1] = 120 ) {}

Arrays são muito úteis para agrupar dispositivos e realizar operações neles. Vamos criar um dispositivo no UEFN que possui um array de customizable_light_device. Este dispositivo permite o uso de código Verse para ligar ou desligar a luz.

O nosso dispositivo terá um referência a um button_device. Quando o jogador interagir com o botão, a luz atual será desligada e a próxima será ligada.

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 array_device clique no botão Create Empty.

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

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

array_device := class(creative_device):

    var LampIndex : int = 0

    @editable
    LampsArray : []customizable_light_device = array{}

    @editable
    Button : button_device = button_device{}

    OnBegin<override>()<suspends>:void=
        
        Button.InteractedWithEvent.Subscribe(ChangeLamp)
    
    ChangeLamp(Agent:agent):void=

        if( CurrentLamp := LampsArray[LampIndex] ):
            CurrentLamp.TurnOff()

        set LampIndex += 1

        if( LampIndex >= LampsArray.Length ):
            set LampIndex = 0

        if( NextLamp := LampsArray[LampIndex] ):
            NextLamp.TurnOn()        

A LampsArray tem o atributo @editable que permite a edição do array no editor do UEFN. A função ChangeLamp é registrada no evento InteractedWithEvent do botão. Ela será executada quando o jogador interagir com o botã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 array_device ao nível. Vamos precisar também de um button_device e algumas customizable_light_device (no meu exemplo eu usei 4). Eu sugiro escolher cores diferentes para ficar mais visível a troca das luzes.

Selecione o array_device no nível. Na aba Details você pode adicionar elementos no LampsArray  clicando no botão +. Selecione uma referência de customizable_light_device para cada elemento do array. Selecione também a referência para o button_device


Eu adicionei algumas paredes no nível para deixar a iluminação mais visível.

Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Interaja com o button device para alternar as luzes.


Sumário Verse