terça-feira, 20 de junho de 2023

Dispositivo Score Manager

Neste artigo vamos usar um dispositivo chamado Score Manager para atribuir pontos ao jogador quando ele coletar uma moeda.

Acesse o Content Drawer e a pasta CollectGame Content > Fortnite > Devices. Pesquise por score manager: 


Arraste o Score Manager e solte no nível perto do dispositivo Verse.

Na aba Details, categoria User Options, temos as propriedades Score Value e Score Award Type que definem como os pontos são dados ao jogador quando o dispositivo for ativado. Deixe estas propriedades com os valores padrões de 1 e Add:


Marque a propriedade Display Score Update on HUD para que seja exibida uma mensagem quando o jogador receber pontos. Marque também a propriedade Reset HUD Message Score para a que a mensagem na tela mostre somente os pontos da última moeda coletada.


Agora vamos criar a referência para o Score Manage no código do dispositivo Verse. Adicione a constante ScoreManagerDevice abaixo da linha do array CoinSpawnerDevices:


    @editable
    var CoinSpawnerDevices : []item_spawner_device = array{}    
    
    @editable
    ScoreManagerDevice : score_manager_device = score_manager_device{}

Criaremos uma função com o nome HandleCoinPickedUp para registrar no evento Item Pickup dos Item Spawners. Esta função será chamada quando o jogador coletar uma moeda. 

    HandleCoinPickedUp(Agent:agent):void=

        ScoreManagerDevice.Activate(Agent)

        SpawnCoin()

A função HandleCoinPickedUp ativa o dispositivo Score Manager que atribuirá pontos ao jogador e depois chama a função SpawnCoin para gerar outra moeda. No próximo artigo vamos adicionar regras de pontuação, bônus de tempo e nível do jogo nesta função.

Precisamos registrar a função HandleCoinPickedUp em todos os Item Spawners do nível. Isto será feito na função SetupCoinSpawnerDevices após o preenchimento do array CoinSpawnerDevices. Um laço for é usado para percorrer o array CoinSpawnerDevices e registrar a função HandleCoinPickedUp  em cada um dos elementos do array.

    SetupCoinSpawnerDevices():void=

        TaggedActors := GetCreativeObjectsWithTag(coin_spawner{})

        set CoinSpawnerDevices = for:
            TaggedActor : TaggedActors
            ItemDevice := item_spawner_device[TaggedActor]
        do:
            ItemDevice

        for (SpawnerDevice : CoinSpawnerDevices):
            SpawnerDevice.ItemPickedUpEvent.Subscribe(HandleCoinPickedUp)            

        SpawnCoin()
    


A nova versão do collect_game_device vai ficar assim:

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

coin_spawner := class(tag){}

collect_game_device := class(creative_device):

    @editable
    TimerDevice : timer_device = timer_device{}

    @editable
    EndGameDevice : end_game_device = end_game_device{}

    @editable
    var CoinSpawnerDevices : []item_spawner_device = array{}

    @editable
    ScoreManagerDevice : score_manager_device = score_manager_device{}

    OnBegin<override>()<suspends>:void=
        TimerDevice.SuccessEvent.Subscribe(HandleTimerFinished)
        SetupCoinSpawnerDevices()
        
    HandleTimerFinished(MaybeAgent:?agent):void=
        if(Agent := MaybeAgent?):
            EndGameDevice.Activate(Agent)

    SpawnCoin():void=    
        if: 
            IndexSpawner: int = GetRandomInt(0, CoinSpawnerDevices.Length - 1 )
            NextCoinSpawner := CoinSpawnerDevices[IndexSpawner]
        then:
            NextCoinSpawner.SpawnItem()

    SetupCoinSpawnerDevices():void=

        TaggedActors := GetCreativeObjectsWithTag(coin_spawner{})

        set CoinSpawnerDevices = for:
            TaggedActor : TaggedActors
            ItemDevice := item_spawner_device[TaggedActor]
        do:
            ItemDevice

        for (SpawnerDevice : CoinSpawnerDevices):
            SpawnerDevice.ItemPickedUpEvent.Subscribe(HandleCoinPickedUp)            

        SpawnCoin()
    
    HandleCoinPickedUp(Agent:agent):void=

        ScoreManagerDevice.Activate(Agent)

        SpawnCoin()

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

Selecione o collect game device que está no nível. Na aba Details, clique no drop-down de ScoreManagerDevice e selecione o Score Manager que está no nível: 


Salve o nível e inicie a sessão. Ao coletar uma moeda você ganhará um ponto e outra moeda será gerada.

No próximo artigo faremos algumas melhorias relacionadas a pontuação e tempo e concluiremos este mini game.  


Sumário Verse