Константы
Константа — это место, в котором хранится значение, и это значение не может изменяться при работе программы в среде выполнения.
Чтобы создать константу, нужно указать её идентификатор и тип, т. е. объявить константу, а также задать её значение, т. е. инициализировать константу.
Константа должна быть инициализирована при объявлении и объявлена до использования.
Создание константы подразумевает следующий синтаксис:
Identifier : type = expressionЕсли константа объявляется в функции, тип можно не указывать:
Identifier := expressionЕсли тип не указан, тип константы выводится из выражения, используемого для инициализации константы. Опускать тип можно только для локальных констант, поскольку тип описывает способ использования константы. Константа в модуле составляет часть его интерфейса. Без типа интерфейс является неявным.
В следующем примере на каждой итерации цикла loop генерируется случайное число, которое используется для инициализации константы RandomNumber. Случайное число вызывает выход из цикла только в том случае, если оно меньше 20.
loop:
Limit := 20
# For local constants, the type can be omitted.
RandomNumber : int = GetRandomNumber()
# Providing the type explicitly can make the code easier to read.
if (RandomNumber < Limit):
breakОбратите внимание, что на каждой итерации цикла вводится новая константа с именем RandomNumber, которой в качестве значения присваивается результат GetRandomNumber().
Переменные
Помимо констант, описанных выше, в Verse также есть переменные.
Переменные похожи на константы, однако они определяются с помощью ключевого слова var, которое означает, что их значения можно изменить в любой момент.
Например, такой тип:
var MaxHealthUpgrade : int = 10является целочисленной переменной, и её значение не обязательно всегда будет равно 10.
Создание переменной подразумевает следующий синтаксис:
var Identifier : type = expressionОбратите внимание, что для переменных тип должен быть указан явно.
После создания переменной можно присвоить ей новое значение с помощью следующего синтаксиса:
set Identifier = expressionПомимо =, для изменения значения переменной можно использовать множество других операторов. Например, такой тип:
var X:int = 0
set X += 1
set X *= 2Глобальные переменные
Переменная, определенная в модуле, является глобальной для любого запущенного экземпляра игры, в области действия которого находится переменная.
Один из способов объявить переменную с областью действия модуля в Verse — это использовать тип weak_map(session, t), где тип ключа — это тип текущего экземпляра острова Fortnite, или session, а тип значения — это любой тип t. Более подробно о weak_map читайте в статье Ассоциативный массив.
В следующем примере показано, как создать глобальную целочисленную переменную с названием GlobalInt, значение которой увеличивается на единицу при каждом вызове ExampleFunction().
using { /Verse.org/Simulation } # For session
var GlobalInt:weak_map(session, int) = map{}
ExampleFunction():void=
X := if (Y := GlobalInt[GetSession()]) then Y + 1 else 0
if:
set GlobalInt[GetSession()] = X
Print("{X}")Переменные области видимости модуля, использующие тип session в качестве ключа, имеют следующие ограничения:
Вы можете обращаться к их значениям только в текущем сеансе, в любом другом они недоступны.
Переменную
weak_mapв области действия модуля нельзя прочитать или перезаписать полностью, поэтому её значения невозможно считать или переопределить для всех сеансов сразу.Нельзя перебирать значения
weak_mapили узнать, сколько активных сеансов запущено на данный момент, поскольку уweak_mapнет длины.
Сохраняемые данные
Переменные области видимости модуля, за исключением тех, что связаны с сеансом, должны быть сохраняемыми — иметь возможность хранения данных за пределами текущей игры.
Вы можете объявить сохраняемую переменную в Verse, используя тип strong_map(player, t). Данные любого типа, представленные символом t и являющиеся сохраняемыми, могут храниться и быть доступны для конкретного игрока, а данные могут быть видны в последующих игровых сеансах. Всякий раз, когда игрок присоединяется к игре, его предыдущие сохраненные данные загружаются во все переменные области модуля типа weak_map(player, t).
В следующем примере глобальная переменная 'weak_map' MySavedPlayerData использует тип игрока в качестве ключа, а целое число — в качестве значения. После определения сохраняемых данных нужно будет инициализировать данные для каждого игрока. Вы можете сделать это, проверив наличие других сохранённых данных для этого игрока, а затем добавив игрока и начальное значение в weak_map.
using { /Fortnite.com/Devices }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Simulation }
var MySavedPlayerData:weak_map(player, int) = map{}
# A Verse-authored creative device that can be placed in a level
persistence_example := class(creative_device):
# Runs when the device is started in a running game
Переменные области видимости модуля, использующие тип player в качестве ключа, имеют следующие ограничения:
Доступ к сохраняемым данным игрока разрешен только тогда, когда игрок находится в текущей игре.
Если игрок покидает игру или не участвует в текущем сеансе, вы больше не сможете хранить его данные или получать к ним доступ в этом игровом сеансе. Если игрок возвращается или снова начинает играть в ту же игру, вы можете получить доступ к его данным и обновить их.
Переменную
weak_mapв области видимости модуля нельзя прочитать или перезаписать полностью, поэтому её значения невозможно считать или переопределить для всех игроков сразу.Вы не можете перебирать значения
weak_mapили узнать, для скольки игроков созданы записи вweak_map, посколькуweak_mapне имеет длины.Один остров может иметь до двух сохраняемых переменных, то есть двух переменных
weak_mapсplayerв качестве типа ключа.Значение
weak_mapкак минимум одной сохраняемой переменной должно быть классом, если достигнут предел для максимального количества сохраняемых переменных.Одна запись
weak_mapимеет максимальный размер данных 128 килобайт (КБ) на игрока.
Подробнее о сохраняемых элементах в Verse см. в статье Использование сохраняемых данных в Verse.