quinta-feira, 14 de agosto de 2025

UEFN Verse: Rush (fluxo de tempo)

Rush é uma expressão de controle de fluxo de tempo que executa outras expressões simultaneamente e finaliza assim que uma das expressões em seu bloco finalizar. Entretanto, as outras expressões dentro do Rush continuam a ser executadas.

O código abaixo mostra um exemplo simples da expressão rush: 

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

        rush:
            Car1.MoveTo(Car1_Destination, Car1_Rotation, Car1_MoveTime)
            Car2.MoveTo(Car2_Destination, Car2_Rotation, Car2_MoveTime)
            Car3.MoveTo(Car3_Destination, Car3_Rotation, Car3_MoveTime)
            
        Print("Um dos carros cruzou a linha de chegada")

Car1Car2 Car3 são instâncias de creative_prop. A função MoveTo() move o creative_prop para a posição e rotação passadas como parâmetro com a duração do tempo especificado.

Assim que uma das funções MoveTo finalizar, a expressão rush também finalizará e a função Print() será executada. Mesmo depois da expressão rush finalizar, as outras funções MoveTo continuarão executando até concluírem.

Para exemplificar o uso da expressão rush vamos fazer uma simples simulação de corrida de carros. Para manter o exemplo simples, cada carro se move em linha reta até chegar na posição indicada por um creative_prop. O tempo de corrida de cada carro será definido aleatoriamente.

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

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

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

rush_device := class(creative_device):

    @editable
    Car1 : creative_prop = creative_prop{}

    @editable
    Car2 : creative_prop = creative_prop{}

    @editable
    Car3 : creative_prop = creative_prop{}

    @editable 
    EndLocation1 : creative_prop = creative_prop{}

    @editable 
    EndLocation2 : creative_prop = creative_prop{}

    @editable 
    EndLocation3 : creative_prop = creative_prop{}

    @editable
    MinTime : float = 10.0

    @editable
    MaxTime : float = 20.0

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

        Car1_Destination := EndLocation1.GetTransform().Translation
        Car1_Rotation := Car1.GetTransform().Rotation
        Car1_MoveTime := GetRandomFloat(MinTime, MaxTime)

        Car2_Destination := EndLocation2.GetTransform().Translation
        Car2_Rotation := Car2.GetTransform().Rotation
        Car2_MoveTime := GetRandomFloat(MinTime, MaxTime)

        Car3_Destination := EndLocation3.GetTransform().Translation
        Car3_Rotation := Car3.GetTransform().Rotation
        Car3_MoveTime := GetRandomFloat(MinTime, MaxTime)

        Winner := rush: 
            block:
                Car1.MoveTo(Car1_Destination, Car1_Rotation, Car1_MoveTime)
                "Car 1"
            block:
                Car2.MoveTo(Car2_Destination, Car2_Rotation, Car2_MoveTime)
                "Car 2"
            block:
                Car3.MoveTo(Car3_Destination, Car3_Rotation, Car3_MoveTime)
                "Car 3"    

        Print("WINNER: {Winner}")

A expressão rush do exemplo acima possui três blocos com MoveTo() e uma string que será o resultado da expressão rush

A expressão rush foi usada neste exemplo para que os outros carros continuem se movendo até o final mesmo depois que o primeiro carro tenha chegado. 

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 rush_device ao nível. O exemplo precisa de três creative_prop representando os carros e três creative_prop que indicam os destinos dos carros. 

Para os carros eu usei o Car Rat, Car Pickup e Car Stocker. Pesquise por eles no Content Drawer. Para os destinos, usei três instâncias de Racetrack Flag. A pista foi feita com um Road Straight 1x1 e um Road Straight 1x1 Finishline Cap.

Selecione o rush_device no nível. Na aba Details adicione as referências dos creative props.


Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Assista a corrida e veja que os outros carros continuam a se mover mesmo depois do primeiro carro ter vencido a corrida e concluído a expressão rush.