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")
Car1, Car2 e 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 e 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.