sábado, 21 de outubro de 2023

UEFN Verse: 1ª versão do round_based_device

Neste artigo vamos criar a 1ª versão do dispositivo Verse que será responsável por controlar nosso jogo. No aprendizado de programação é importante começar com pequenos blocos de código e tentar entender todos os elementos que estão sendo usados.

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 round_based_device e clique no botão Create para usar o código do template.

Se você tiver dúvida sobre a criação de um arquivo Verse, eu recomendo a leitura deste artigo da Parte I:

Criando o primeiro dispositivo Verse

Adicione uma constante com o atributo @editable para referenciar o End Game device e um array para referenciar as Capture Areas como mostra o código abaixo: 

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

round_based_device := class(creative_device):

    @editable
    EndGameDevice : end_game_device = end_game_device{}

    @editable 
    CaptureAreas: []capture_area_device = array{}


Se você não sabe o que são arrays, leia este artigo da Parte I:

Armazenando os Item Spawners em um Array


Crie uma função com o nome AreaCaptured. Esta função será executada quando o jogador capturar uma área. Para que isso ocorra, vamos registrar a função no evento AreaIsScoredEvent da Capture Area device. Nesta 1ª versão, a função AreaCaptured irá apenas ativar o End Game device que finalizará o round.

Remova o código do template que está na função OnBegin e adicione o código abaixo:

    OnBegin<override>()<suspends>:void=
        for (Area : CaptureAreas):
            Area.AreaIsScoredEvent.Subscribe(AreaCaptured)

    AreaCaptured(Agent:agent):void=
        EndGameDevice.Activate(Agent)


Na função OnBegin temos um loop for que é usado para iterar nos elementos do array CaptureAreas e registrar a função AreaCaptured no evento AreaIsScoredEvent de cada uma das Capture Areas.

O código Verse da 1ª versão do round_based_device fica assim:

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

round_based_device := class(creative_device):

    @editable
    EndGameDevice : end_game_device = end_game_device{}

    @editable 
    CaptureAreas: []capture_area_device = array{}

    OnBegin<override>()<suspends>:void=
        for (Area : CaptureAreas):
            Area.AreaIsScoredEvent.Subscribe(AreaCaptured)

    AreaCaptured(Agent:agent):void=
        EndGameDevice.Activate(Agent)    

Salve o arquivo e compile o código Verse usando a opção Verse > Build Verse Code do menu do UEFN.

Para adicionar o nosso dispositivo Verse ao nível, acesse o Content Drawer e a pasta CreativeDevices:


Arraste o round_based_device e solte-o no nível no local indicado na imagem abaixo. Este dispositivo Verse também será útil como proteção contra os tiros dos guardas. 



Selecione o round_based_device no nível. Na aba Details selecione a referência do EndGameDevice e adicione 5 elementos no array CaptureAreas. Selecione as referências das Capture Areas.



Salve o nível e inicie a sessão. Capture uma das áreas para encerrar o round atual. No final do Round 5 será exibida a tela de fim de jogo.



No próximo artigo vamos aprender sobre o dispositivo Round Settings.


Sumário Verse