Le comportement de base du mini-jeu est défini dans l'appareil Verse verse_commander_minigame. Cet appareil démarre le mini-jeu, traite la communication entre l'interface utilisateur et le personnage et gère les plateaux utilisés dans le jeu.
Cet appareil comporte les champs suivants, que vous pouvez modifier dans l'éditeur :
HUDController : contrôleur d'ATH permettant de supprimer tous les éléments d'ATH par défaut de Fortnite.
PlayVerseCommanderButton : appareil de bouton qui démarre le mini-jeu.
NPCSpawner : appareil générateur de PNJ permettant de faire apparaître le personnage pour le mini-jeu.
Plateaux de jeu : liste des plateaux de jeu. Les plateaux sont lus selon l'ordre dans lequel ils apparaissent dans la liste.
UICommandLimit : limite maximale de commandes pouvant être mises en file d'attente à l'écran en bas de la liste.
L'appareil contient également des événements personnalisés pour communiquer avec le personnage et lui transmettre des informations : la liste des commandes à exécuter par le personnage et la transformation vers laquelle le personnage doit être téléporté lorsque le plateau est réinitialisé.
# 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{}
Démarrer le mini-jeu
L'appareil Mini-jeu Commandant Verse attend que le joueur interagisse avec l'appareil Bouton de l'ordinateur avant de lancer le mini-jeu pour tous les joueurs. Cette attente est placée dans une boucle. Après avoir terminé tous les niveaux, vous pouvez rejouer au mini-jeu autant de fois que vous le souhaitez.
# 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)
Boucle de jeu
La boucle de jeu commence par l'obtention du plateau actuel. Si c'est la première fois qu'un joueur se trouve sur ce plateau, le personnage est téléporté vers la position de départ du plateau, et le plateau active sa caméra et exécute sa cinématique d'ouverture.
Une course (`race`) a alors lieu entre la boucle de niveau et l'attente de l'événement de réinitialisation provenant de l'interface utilisateur. Celle qui se termine en premier annule l'autre. Les expressions de la boucle se répètent alors, réobtiennent le plateau actuel et relancent la course.
# 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:
Boucle de niveau
La fonction LevelLoop() gère la logique du plateau de jeu. Elle lance une course entre la boucle de commande du personnage et le temps pour que l'objectif final du plateau soit atteint. Une fois l'objectif final atteint, la boucle de commande est annulée et le plateau suivant de la liste est appelé.
La boucle de commande attend que le joueur appuie sur le bouton Exécuter pour recevoir la liste des commandes à exécuter. Les boutons sont désactivés, à l'exception du bouton de réinitialisation. Le personnage reçoit un signal pour exécuter les commandes, et l'appareil Verse attend de recevoir le signal de fin avant de redémarrer la boucle et d'attendre d'autres commandes.
Une expression defer est utilisée dans cette boucle pour nettoyer l'interface utilisateur si la boucle de commande ou la fonction LevelLoop() est annulée. L'expression defer appelle ResetUIForAllPlayers() juste avant de quitter l'étendue pour réinitialiser l'interactivité des boutons afin qu'ils soient à nouveau activés et pour effacer les commandes en bas de la liste.
# 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.
Réinitialiser le jeu
La fonction AwaitReset() attend que le joueur sélectionne le bouton de réinitialisation. Une fois qu'il l'a sélectionné, le plateau est réinitialisé et indique au personnage de se téléporter vers la position de départ sur le plateau.
# 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
Étape suivante
Cette étape couvre les principales fonctionnalités de l'appareil Verse pour le mini-jeu. Vous trouverez le code complet nécessaire à la création de l'appareil Mini-jeu Commandant Verse à la prochaine et dernière étape.