Il comportamento principale del minigioco è definito nel dispositivo Verse verse_commander_minigame. Questo dispositivo avvia il minigioco, gestisce la comunicazione tra la UI e il personaggio ed esegue i tabelloni utilizzati nel gioco.
Questo dispositivo ha i seguenti campi che è possibile modificare nell'editor:
HUDController: dispositivo HUD Controller per rimuovere tutti gli elementi HUD Fortnite.
PlayVerseCommanderButton: dispositivo Pulsante che avvia il minigioco.
NPCSpawner: Generatore di PNG per generare il personaggio per il minigioco.
Tabelloni di gioco: elenco dei tabelloni per il gioco. I tabelloni vengono riprodotti nell'ordine in cui appaiono nell'elenco.
UICommandLimit: limite massimo di comandi che possono essere accodati sullo schermo in fondo all'elenco.
Il dispositivo contiene anche eventi personalizzati per comunicare con il personaggio e passare informazioni al personaggio: l'elenco dei comandi del personaggio da eseguire e la trasformazione del personaggio a cui teletrasportarsi quando il tabellone viene reimpostato.
# A Verse-authored creative device that can be placed in a level
verse_commander_minigame := class(creative_device):
# The HUD Controller device for the minigame.
@editable
HUDController<private>:hud_controller_device = hud_controller_device{}
# The button that starts the minigame.
@editable
PlayVerseCommanderButton:button_device = button_device{}
Avvio del minigioco
Il dispositivo minigioco Verse Commander attende che il giocatore interagisca con il dispositivo pulsante sul computer prima di iniziare il minigioco per tutti i giocatori. Questa attesa è in un loop. Una volta completati tutti i livelli, puoi rigiocare il minigioco tutte le volte che vuoi.
# Runs when the device is started in a running game.
OnBegin<override>()<suspends>:void=
spawn{Cinematic.EnterCinematicModeForAll(GetPlayspace().GetPlayers())}
loop:
PlayVerseCommanderButton.InteractedWithEvent.Await()
Setup()
# Wait for all Gameboards to be set up.
Sleep(2.0)
Loop di gioco
Il loop di gioco inizia con l'ottenimento del tabellone corrente. Se è la prima volta che un giocatore si trova su questo tabellone, il personaggio si teletrasporta nella posizione di partenza del tabellone e il tabellone passa alla sua telecamera e riproduce la cinematica di apertura.
Quindi, c'è una gara tra il loop di livello e l'attesa dell'evento di reimpostazione dalla UI. Se uno di questi finisce per primo, annulla l'altro. Le espressioni nel loop quindi si ripetono e tornano a prendere il tabellone corrente e ricominciare la gara.
# Loops over the current gameboard and resets them.
GameLoop<private>()<suspends>:void=
# For the current board, swap to that gameboard's camera and reset the character to the gameboard's starting position.
loop:
if:
Gameboard := Gameboards[CurrentBoard]
then:
# If first time on this board, set up the board
# and move character to starting position.
if:
Loop di livello
La funzione LevelLoop() gestisce la logica del tabellone. Corre tra il loop di comando per il personaggio e l'attesa che l'obiettivo finale del tabellone venga raggiunto. Una volta raggiunto l'obiettivo finale, il loop di comandi viene annullato e viene chiamato il tabellone successivo nell'elenco.
Il loop di comandi attende che il giocatore prema il pulsante Esegui per ricevere l'elenco dei comandi da eseguire. I pulsanti sono disattivati, ad eccezione del pulsante di reimpostazione. Il personaggio viene segnalato per eseguire i comandi e il dispositivo Verse attende di ricevere il segnale finito prima di riavviare il loop e attendere altri comandi.
In questo loop viene utilizzato un defer per ripulire la UI se il loop dei comandi o la funzione LevelLoop() viene annullato. L'espressione defer chiamerà ResetUIForAllPlayers() prima di uscire dall'ambito per reimpostare l'interattività dei pulsanti in modo che vengano abilitati di nuovo e cancellare l'elenco dei comandi nella parte inferiore.
# Handles command logic for the current gameboard.
LevelLoop<private>(Gameboard:gameboard)<suspends>:void=
# On the current board, race between completing the board and looping player commands.
# The race expression will cancel whichever action doesn't finish first.
race:
loop:
defer:
# If the loop is canceled because the character reached the end goal of the level,
# Or the character finished performing their commands,
# reset the UI for all the players so they can interact with it and have no commands in the queue.
Reimpostazione del gioco
La funzione AwaitReset() attende che il lettore selezioni il pulsante di reimpostazione. Una volta fatto, il tabellone si reimposta e dice al personaggio di teletrasportarsi nella posizione di partenza sul tabellone.
# Waits for the Reset button to be selected, then resets the current gameboard
# and NPC.
AwaitReset<private>(Gameboard:gameboard)<suspends>:void=
ResetButtonSelected.Await()
# Reset the current gameboard, returning the game character to the starting position and
# resetting any barriers or triggers on the board.
BoardResetEvent.Signal(Gameboard.GetStartingCharacterPosition())
# Reset Gameboard
Step successivo
Questo copre le funzionalità principali del dispositivo Verse per il minigioco. Puoi trovare l'elenco completo del codice per creare il dispositivo minigioco Verse Commander nello step successivo e finale.