Stałe
Stała jest miejscem przechowywania wartości, przy czym wartość ta nie może ulec zmianie w czasie wykonywania programu.
Aby utworzyć stałą, musisz określić jej identyfikator oraz typ(co nazywa się deklarowaniem stałej), a także musisz podać wartość stałej, co nazywamy inicjowaniem stałej.
Stała musi zostać zainicjowana w momencie zadeklarowania, które musi nastąpić, zanim zostanie użyta.
Stałą tworzy się zgodnie z następującą składnią:
Identifier : type = expressionStałe zadeklarowane w funkcji mogą pomijać typ:
Identifier := expressionW przypadku pominięcia typu typ stałej zostanie wywnioskowany z wyrażenia użytego do zainicjowania stałej. Typ można pomijać tylko w stałych lokalnych, ponieważ typ opisuje, w jaki sposób stała będzie używana. Stała w module stanowi część interfejsu zawierającego ją modułu. Bez typu interfejs staje się nieoczywisty.
W poniższym przykładzie w każdej iteracji pętli generowana jest losowa liczba, która następnie zostaje wykorzystana do zainicjowania stałej RandomNumber. Losowa liczba spowoduje przerwanie pętli dopiero wówczas, gdy będzie większa od dwudziestu.
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):
breakZwróć uwagę, że w każdej iteracji pętli wprowadzana jest nowa stała o nazwie RandomNumber, której przypisuje się wynik GetRandomNumber() będący jej wartością.
Zmienne
Oprócz opisanych powyżej stałych, język Verse posiada również zmienne.
Zmienne są zbliżone do stałych, jednak definiuje się je za pomocą słowa kluczowego var, co oznacza możliwość zmiany ich wartości w dowolnej chwili.
Na przykład:
var MaxHealthUpgrade : int = 10jest zmienną typu liczba całkowita, której wartość nie zawsze musi wynosić 10.
Zmienne tworzy się zgodnie z następującą składnią:
var Identifier : type = expressionZwróć uwagę, że w przypadku zmiennych typ musi być jawnie określony.
Po utworzeniu zmiennej można przypisać do niej różne wartości, stosując następującą składnię:
set Identifier = expressionOprócz =, do modyfikowania zmiennej można wykorzystać również szereg innych operatorów. Na przykład:
var X:int = 0
set X += 1
set X *= 2Zmienne globalne
Zmienna definiowana w module ma charakter globalny dla każdej uruchomionej Instancji gry, w której zmienna należy do zakresu.
Jednym ze sposobów zadeklarowania zmiennej w zakresie modułu w Verse jest użycie typu weak_map(session, t), w którym typ klucza jest typem bieżącej instancji wyspy Fortnite lub session, a typ wartości jest dowolnym typem t. Szczegółowe informacje o slow_map, patrz: Mapa.
W poniższym przykładzie zaprezentowano, jak utworzyć zmienną globalną będącą liczbą całkowitą o nazwie GlobalInt, której wartość będzie się zwiększać przy każdym wywołaniu funkcji 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}")Zmienne z zakresem modułu wykorzystujące typ sesji jako klucz mają następujące ograniczenia:
Można przechodzić tylko do wartości aktualnej, aktywnej sesji.
Zmiennej
weak_mapo zakresie modułu nie można całkowicie odczytać ani zapisać, przez co nie da się odczytywać ani zastępować wartości dla wszystkich sesji.Nie można iterować wartości typu
weak_maplub zobaczyć, ile sesji jest aktywnych w danej chwili, ponieważ typweak_mapnie ma długości.
Dane możliwe do utrwalenia
Z wyjątkiem zmiennych z zakresem modułu powiązanych z session, zmienna z zakresem modułu wymaga persystencji, przechowywania danych przez okres dłuższy niż bieżąca gra.
Zmienną możliwą do utrwalenia w Verse można zadeklarować przy użyciu typu slow_map(player, t). Dowolny typ reprezentowany przez t, który jest możliwy do utrwalenia, może być przechowywany i dostępny dla konkretnego gracza, a dane mogą być widoczne dla kolejnych sesji gry. Za każdym razem, gdy gracz dołącza do gry, jego poprzednio zapisane dane są ładowane do wszystkich zmiennych z zakresem modułu typu weak_map(player, t).
W poniższym przykładzie globalna zmienna 'weak_map' MySavedPlayerData używa typu gracza jako klucza i liczby całkowitej jako wartości. Po zdefiniowaniu danych możliwych do utrwalenia należy zainicjować dane dla każdego gracza. Można to zrobić, sprawdzając, czy nie ma już zachowanych danych dla tego gracza, a następnie dodając gracza i wartość początkową do 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
Zmienne z zakresem modułu wykorzystujące typ gracza jako klucz mają następujące ograniczenia:
Dostęp do utrwalonych danych gracza jest możliwy tylko wtedy, gdy gracz znajduje się w bieżącej grze.
Jeśli gracz opuści grę lub nie jest w bieżącej sesji, nie można już przechowywać ani uzyskiwać dostępu do jego danych w tej sesji gry. Jeśli gracz powróci lub ponownie zagra w tę samą grę, można uzyskać dostęp do jego danych i je zaktualizować.
Nie można całkowicie odczytać ani zapisać
weak_mapo zakresie modułu, więc nie można odczytać ani zastąpić wartości dla wszystkich graczy.Nie można iterować wartości typu
weak_mapani sprawdzić, ilu graczy ma rekord wweak_map, ponieważ typweak_mapnie ma długości.Każda wyspa może mieć do dwóch stałych zmiennych, czyli dwie zmienne
weak_mapze zmiennąplayerjako typem klucza.Przynajmniej jedna wartość
weak_maputrwalonej zmiennej musi być klasą, jeśli limit maksymalnej liczby zmiennych trwałych został osiągnięty.Pojedynczy rekord
weak_mapma maksymalny rozmiar danych 128 kilobajtów (KB) na gracza.
Więcej informacji na temat persystencji w Verse znajdziesz w artykule Używanie persystentnych danych w Verse.