4.1 KiB
Zmienne globalne i wbudowane
Silnik udostępnia kilka kategorii zmiennych i nazw, do których można odwoływać się z dowolnego miejsca w skryptach, niezależnie od ich poziomu w hierarchii kontekstów. Niniejszy rozdział opisuje wbudowane obiekty, zmienne niejawne, specjalne procedury oraz hierarchię widoczności.
Hierarchia kontekstów
Każdy wczytywany skrypt tworzy kontekst zmiennych. Konteksty są zagnieżdżone: kontekst sceny dziedziczy po kontekście epizodu, ten po kontekście aplikacji, a ten po kontekście globalnym silnika. Wyszukiwanie zmiennej odbywa się od najniższego kontekstu w górę — zmienne z niższych poziomów przesłaniają zmienne o tej samej nazwie z poziomów wyższych, ale zmienne wyższych poziomów są widoczne z poziomów niższych.
Obiekty wbudowane
Następujące obiekty są tworzone leniwie przez silnik przy pierwszym odwołaniu i są dostępne z dowolnego kontekstu pod stałymi nazwami:
| Nazwa | Typ | Opis |
|---|---|---|
MOUSE |
MOUSE |
Stan myszy (pozycja, kliknięcia). |
KEYBOARD |
KEYBOARD |
Stan klawiatury. |
RAND |
RAND |
Generator liczb pseudolosowych. Dostępny również pod aliasem RANDOM. |
SYSTEM |
SYSTEM |
Interfejs do funkcji systemowych (czas, środowisko). |
Wszystkie cztery obiekty są singletonami w kontekście globalnym — odwołanie do nich z dowolnego skryptu trafia do tej samej instancji.
Obiekty z Application.def
Obiekty zdefiniowane w pliku Application.def — typu APPLICATION, EPISODE oraz SCENE — są ładowane do kontekstu globalnego silnika i widoczne ze wszystkich skryptów gry. Pozostałe typy w tym pliku są ignorowane (zobacz Punkt startowy).
Zmienne niejawne
Silnik wstrzykuje do skryptów kilka zmiennych nie deklarowanych jawnie.
_I_
Licznik pętli ustawiany przez instrukcję @LOOP. Jest zmienną typu INTEGER tworzoną lokalnie w kontekście bieżącej iteracji. Wartość zmienia się automatycznie wraz z postępem pętli.
Wewnątrz pętli @LOOP _I_ może być odczytywana w wyrażeniach arytmetycznych i jako argument metod:
@LOOP({*["ANIMO_"+_I_]^PLAY();}, 0, 10, 1);
Pętla @FOR pozwala podać własną nazwę licznika; w takim przypadku _I_ nie jest ustawiana.
THIS
Referencja do obiektu, który wyemitował aktualnie obsługiwany sygnał. Dostępna wyłącznie w bloku obsługi sygnału i procedurach z niego wywołanych. Szczegóły jej zachowania opisano w sekcji Zmienna THIS.
$1, $2, … $N
Argumenty procedury lub obsługi sygnału (numeracja od 1). Dostępne tylko w ciele procedury lub bloku obsługującego sygnał:
PROCEDURA:CODE={NAZWA_ZMIENNEJ^SET($1);}
Powyższa składnia jest opisana również w sekcji Argumenty procedur.
Specjalne procedury
Niektóre nazwy procedur mają znaczenie konwencjonalne — silnik wywołuje je automatycznie w określonych momentach cyklu życia.
__ONINIT__
Procedura wywoływana po zakończeniu inicjalizacji wszystkich zmiennych w wczytanym pliku. Zobacz Inicjalizacja zmiennych. Typowe zastosowanie: ustawienie stanu początkowego sceny po tym, jak wszystkie obiekty są już dostępne.
__INIT__
Procedura wywoływana po załadowaniu sceny i wykonaniu inicjalizacji zmiennych — bezpośrednio przed przekazaniem sterowania do logiki gry. Wykorzystywana do ustawiania stanu sceny zależnego od bieżącego epizodu lub aplikacji.
Konwencja nazewnictwa
Nazwy poprzedzone i zakończone dwoma podkreślnikami (__NAZWA__) są zarezerwowane dla silnika oraz dla konwencjonalnych nazw rozpoznawanych globalnie (np. __KEYB__, __INIT__, __ONINIT__). W praktyce skrypty AidemMedia używają tego formatu również dla własnych zmiennych globalnych, których nie chcą przypadkowo przesłonić w kontekstach lokalnych.