segunda-feira, 3 de fevereiro de 2025

UEFN Verse: Laço For

O laço For é usado para repetir um bloco de código por um determinado número de vezes.

O código abaixo é um exemplo bem simples de uso do laço For que vai escrever na tela os números de 1 a 5.

for ( Number := 1..5 ):
    Print("{Number}")

A expressão Number := 1..5 é um gerador que cria uma sequência de números inteiros que começa em 1 e termina em 5. A quantidade de números da sequência determinará a quantidade de vezes que o laço For executará o bloco de código. Para cada execução, o valor atual da sequência será armazenada em Number para ser utilizada no bloco de código do For.

O laço For é muito utilizado para percorrer os elementos de um Array. O exemplo a seguir escreve na tela todos os elementos de um Array de inteiros.

Values : []int = array{4,2,9,6,3}
for ( X : Values ):
    Print("{X}")

A cada iteração do laço For, um dos elementos do Array é armazenado em X.

É possível saber o índice do elemento do Array que está sendo usado na iteração atual do laço For como mostra este código:

Values : []int = array{4,2,9,6,3}
for ( X->Y: Values ):
    Print("Index = {X}, Value = {Y}")

Vamos criar um dispositivo no UEFN para mostrar diversas formas de uso do laço For. O nosso dispositivo possui 3 recursos principais:

  • Liga ou desliga um grupo de lâmpadas;
  • Calcula o fatorial de um número;
  • Encontra o índice do maior valor armazenado em um array;

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

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

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

for_device := class(creative_device):

    @editable
    FactorialValue : int = 8

    @editable
    ArrayOfIntegers : []int = array{4,2,9,6,3}

    @editable
    LampsArray : []customizable_light_device = array{}

    @editable
    Sensor : volume_device = volume_device{}

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

        Sensor.AgentEntersEvent.Subscribe(TurnOnLamps)

        Sensor.AgentExitsEvent.Subscribe(TurnOffLamps)
        
        FactorialResult := CalculateFactorial( FactorialValue )
        Print("Factorial of {FactorialValue} is {FactorialResult}")

        IndexResult := IndexOfHighestValue(ArrayOfIntegers)
        Print("Index of the highest value of the array: {IndexResult}")

    TurnOnLamps(Agent:agent):void=
        for (CurrentLamp : LampsArray):
            CurrentLamp.TurnOn()

    TurnOffLamps(Agent:agent):void=
        for (CurrentLamp : LampsArray):
            CurrentLamp.TurnOff()

    CalculateFactorial(Number:int):int=

        var FactorialResult : int = 1

        for (X := 1..Number):
            set FactorialResult = FactorialResult * X

        return FactorialResult

    IndexOfHighestValue(ValuesArray: []int):int=

        var IndexHighest : int = 0
        var HighestValue : int = 0 

        for ( CurrentIndex -> Value : ValuesArray):
            if( Value > HighestValue ):
                set HighestValue = Value
                set IndexHighest = CurrentIndex 

        return IndexHighest

Está sendo usado um Volume Device para detectar quando um Agente (o jogador) entra ou sai de um volume. As luzes são ligadas ao entrar no volume e desligadas ao sair do volume.

As funções CalculateFactorial e IndexOfHighestValue mostram outras formas de uso do laço For.

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 for_device ao nível. Vamos precisar de 4 customizable_light_device e de um Volume Device. Coloque o Volume Device perto das customizable_light_device para facilitar a visualização.


Selecione o for_device no nível. Na aba Details adicione os elementos no LampsArray e selecione a referência para o Volume Device que será usado como Sensor. Você também pode alterar os valores padrões que estão sendo usados na constante FactorialValue e no array ArrayOfIntegers.


Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Mova seu personagem até o local onde está o Volume Device para acender as lâmpadas e depois se afaste para apagar.

Pressione a tecla Tab e selecione a aba Registro para visualizar no log o resultado das funções CalculateFactorial e IndexOfHighestValue.


Sumário Verse