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.