На этом этапе мы создадим в Verse систему таймера, которая будет задействовать устройства Таймер и Завершение игры. Таймер будет запускаться, как только игрок поразит любую из мишеней, а по истечении времени игра закончится и на табло отобразится счёт.
Несмотря на то, что вы можете завершить игру по таймеру с помощью настроек острова или с помощью одних лишь устройств, использование Verse даёт гораздо больше контроля над используемыми игровыми механиками.
Измените свой остров
Выберите устройство Настройки острова в окне просмотра или на панели Структура.
На панели Сведения задайте следующие параметры:
снимите флажок с Показатель для завершения. Так мы удалим условие окончания подсчёта очков по умолчанию, поскольку мы будем использовать таймер;
для времени отображения счёта в конце игры установите 10 секунд;
активируйте Первую колонку таблицы со счётом и установите вариант Счёт.
В Каталоге ресурсов найдите устройство Таймер и перетащите его в окно просмотра.
На панели Сведения задайте для параметра Отображение в игре вариант Скрыть. Это скроет объект таймера во время игры, но при этом время по-прежнему будет отображаться в интерфейсе игрока, пока он активен.
В Каталоге ресурсов найдите устройство Завершение игры и перетащите его в окно просмотра.
Написание кода Verse
Здесь пошагово рассматривается процесс внесения изменений в код. Если вы хотите проверить свою работу, загляните в раздел Полный код, в котором вы сможете ознакомиться с конечным результатом.
Откройте файл
shooting_range_manager_device.verse.Добавьте следующие переменные для хранения ссылок на новые устройства, а также логическую переменную-флаг для отслеживания состояния таймера.
Переменная-флаг представляет собой переменную, которая проверяет соблюдение того или иного условия.
IsTimerStartedбудет выступать в качестве такого флага, где false будет означать «нет», а true — «да».Verse@editable Timer:timer_device = timer_device{} @editable EndGame:end_game_device = end_game_device{} var IsTimerStarted:logic = falseДобавьте метод обратного вызова
OnTimerSuccess, который будет вызываться, когда время на таймере истечёт для завершения игры.Метод OnTimerSuccess получает параметр агента типа option: того, который активировал таймер (если он был). Для активации устройства «Завершение игры» необходим параметр агента, не являющийся типом option, поэтому агент типа option конвертируется в подходящий тип в блоке
if. Более подробно типы option разобраны в статье Тип option.Verse# When time runs out, end the game. OnTimerSuccess(Agent:?agent):void= if (TriggerAgent := Agent?): EndGame.Activate(TriggerAgent)Добавьте метод StartTimer, который создаст подписку таймера на обратный вызов OnTimerSuccess и запустит таймер.
Verse# Setup and start the timer. StartTimer():void= # Set the event subscription to call OnTimerSuccess when the timer finishes. Timer.SuccessEvent.Subscribe(OnTimerSuccess) # Start the timer. Timer.Start() # Track that the timer has started. set IsTimerStarted = trueИзмените метод AdjustScore для запуска таймера. Это даст игроку время подготовиться к первому выстрелу и начать игру.
Verse# Adjusts the player's score by the provided value. AdjustScore(Value:int):void= <# --- New Code Start --- #> # Start the timer if it hasn't started yet. if (not IsTimerStarted?): StartTimer() <# --- New Code End --- #>Сохраните код Verse и выполните его сборку.
Полный код
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
# A device that manages shooting range gameplay.
shooting_range_manager_device := class(creative_device):
@editable
ScoreManager:score_manager_device = score_manager_device{}
@editable
Собираем воедино
Выберите устройство shooting_range_manager_device в окне просмотра или на панели Структура.
На панели Сведения задайте следующие параметры:
в качестве таймера выберите устройство «Таймер»;
для EndGame выберите устройство «Завершение игры».
Примените изменения и протестируйте свой остров:
убедитесь, что таймер запускается при выстреле по мишени;
убедитесь, что после того, как время на таймере истекло, игра завершается и отображается счёт.
Готовы двигаться дальше?
3. Мишень с бонусным временем
Награждайте игроков, удивив их появлением дополнительной мишени, которая позволит получить драгоценные дополнительные секунды игре!