Mini oyunun temel davranışı verse_commander_minigame Verse cihazında tanımlanır. Bu cihaz mini oyunu başlatır, kullanıcı arayüzü ile karakter arasındaki iletişimi işler ve oyunda kullanılan oyun alanlarını çalıştırır.
Bu cihaz, editörde değiştirebileceğin aşağıdaki alanlara sahiptir:
HUDController: Tüm varsayılan Fortnite Gösterge Paneli öğelerini kaldırmak için bir Gösterge Paneli Kontrol cihazı.
PlayVerseCommanderButton: Mini oyunu başlatan Buton cihazı.
NPCSpawner: Mini oyun karakterini üretebilmek için Karakter Çıkma Yeri cihazı.
Gameboards: Oyunun oyun alanlarının listesi. Oyun alanları, listede göründükleri sırayla oynanır.
UICommandLimit: Ekranda listenin en altında sıraya eklenebilecek maksimum komut sayısı sınırı.
Cihaz ayrıca karakterle iletişim kurmaya ve karaktere bilgi iletmeye yönelik özel olaylar da içerir: karakterin uygulayacağı komutların listesi ve oyun alanı sıfırlandığında karakterin ışınlanacağı dönüşüm.
# 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{}
Mini Oyunu Başlatma
Verse Kumandası Mini Oyun cihazı, tüm oyuncular için mini oyunu başlatmadan önce oyuncunun bilgisayarında Buton cihazıyla etkileşime girmesini bekler. Bu, bir döngü içinde beklenir. Tüm bölümleri tamamladıktan sonra mini oyunu istediğin kadar tekrar oynayabilirsin.
# 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)
Oyun Döngüsü
Oyun döngüsü geçerli oyun alanının alınmasıyla başlar. Bir oyuncu bu oyun alanına ilk kez çıkıyorsa karakter, oyun alanının başlangıç pozisyonuna ışınlanır ve oyun alanı onun kamerasına geçerek açılış sinematiğini oynatır.
Ardından, bölüm döngüsüyle kullanıcı arayüzünden sıfırlama olayının beklenmesi arasında bir yarış gerçekleşir. Bunlardan hangisi ilk önce biterse diğerini iptal eder. Döngüdeki ifadeler daha sonra tekrarlanır ve geçerli oyun alanını alıp yeniden yarışa başlamak üzere geri döner.
# 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:
Bölüm Döngüsü
LevelLoop() fonksiyonu, oyun alanı mantığını yönetir. Karakterin komut döngüsü ve oyun alanının son hedefine ulaşılmasını bekleme arasında yarışır. Son hedefe ulaşıldığında komut döngüsü iptal edilir ve listedeki bir sonraki oyun alanı çağrılır.
Komut döngüsü, oyuncunun uygulanacak komutların listesini almak için Yürüt düğmesine basmasını bekler. Sıfırla düğmesi dışındaki düğmeler devre dışıdır. Karaktere komutları uygulama sinyali verilir ve Verse cihazı, döngüyü yeniden başlatmadan ve daha fazla komut beklemeye geçmeden önce bitti sinyalini almayı bekler.
Komut döngüsü veya LevelLoop() fonksiyonu iptal edilirse kullanıcı arayüzünü temizlemek için bu döngüde bir defer ifadesi kullanılır. Defer ifadesi, kapsamdan çıkmadan hemen önce düğme etkileşimini sıfırlamak ve böylece yeniden etkinleştirilmesini sağlamak ve ekranın altındaki komut listesini temizlemek için ResetUIForAllPlayers() çağrısı yapacaktır.
# 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.
Oyunu Sıfırlama
AwaitReset() fonksiyonu oyuncunun sıfırla düğmesini seçmesini bekler. Oyuncu düğmeye bastığında oyun alanı kendini sıfırlar ve karaktere oyun alanındaki başlangıç konumuna ışınlanmasını söyler.
# 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
Sonraki Adım
Bu bölüm, Verse cihazının mini oyun için ana işlevselliklerini kapsar. Verse Kumandası Mini Oyun cihazını oluşturmak için gereken kodun tam listesini bundan sonraki son adımda bulabilirsin.