108 lines
2.8 KiB
Markdown
108 lines
2.8 KiB
Markdown
# MULTIARRAY
|
||
|
||
Tablica wielowymiarowa, indeksowana od `0`. Domyślnie tworzona jako tablica dwuwymiarowa o wymiarach `16 × 16`; liczba wymiarów może być zmieniona w skrypcie polem `DIMENSIONS`. Każdy wymiar rozszerza się automatycznie (podwajając rozmiar) przy próbie zapisu do pozycji wykraczającej poza bieżący zakres.
|
||
|
||
## Pola
|
||
|
||
### DIMENSIONS
|
||
|
||
```
|
||
INTEGER DIMENSIONS
|
||
```
|
||
|
||
Liczba wymiarów tablicy. Pole odczytywane podczas inicjalizacji zmiennej; domyślnie `2`. Każdy wymiar jest tworzony z początkowym rozmiarem `16`.
|
||
|
||
## Metody
|
||
|
||
### GET
|
||
|
||
```
|
||
mixed GET(INTEGER index1, [INTEGER index2, ..., INTEGER indexN])
|
||
```
|
||
|
||
Zwraca wartość z komórki o podanych współrzędnych. Liczba argumentów musi być równa liczbie wymiarów zadeklarowanej polem `DIMENSIONS`. Dla komórki, do której nie zapisano wartości, lub gdy współrzędne są poza zakresem, zwracany jest `NULL`.
|
||
|
||
**Parametry**
|
||
|
||
- `index1, …, indexN` — współrzędne komórki (numerowane od `0`), po jednej na każdy wymiar.
|
||
|
||
**Zwraca**: wartość komórki lub `NULL`.
|
||
|
||
**Przykłady**
|
||
|
||
```
|
||
ARRMAPA^GET(IKRETMOVEONMAPAX, IKRETPOSMAPAY);
|
||
ARRMAPA^GET([IPLAYERPOSX-1], IPLAYERPOSY);
|
||
ARRMAPA^GET(_I_, I1);
|
||
```
|
||
|
||
### SET
|
||
|
||
```
|
||
void SET(INTEGER index1, [INTEGER index2, ..., INTEGER indexN], mixed value)
|
||
```
|
||
|
||
Zapisuje wartość w komórce o podanych współrzędnych. Liczba argumentów musi być równa liczbie wymiarów + 1; ostatni argument to zapisywana wartość. Jeżeli którakolwiek współrzędna wykracza poza bieżący zakres wymiaru, tablica jest automatycznie powiększana (rozmiar wymiaru jest podwajany aż do objęcia współrzędnej).
|
||
|
||
**Parametry**
|
||
|
||
- `index1, …, indexN` — współrzędne komórki.
|
||
- `value` — zapisywana wartość.
|
||
|
||
**Przykłady**
|
||
|
||
```
|
||
ARRMAPA^SET(ITMPX, ITMPY, 0);
|
||
ARRMAPA^SET(IX, IY, SPOLE);
|
||
ARRMAPA^SET(IPLAYERGOONX, IPLAYERGOONY, "PLAYER");
|
||
ARRMAPA^SET([IPLAYERPOSX+ILASTDIRX], [IPLAYERPOSY+ILASTDIRY], IPLAYER);
|
||
```
|
||
|
||
### GETSIZE
|
||
|
||
```
|
||
INTEGER GETSIZE(INTEGER dimension)
|
||
```
|
||
|
||
Zwraca rozmiar podanego wymiaru tablicy.
|
||
|
||
**Parametry**
|
||
|
||
- `dimension` — indeks wymiaru (numerowany od `0`).
|
||
|
||
**Zwraca**: rozmiar wymiaru lub `0` dla nieprawidłowego indeksu.
|
||
|
||
### LOAD
|
||
|
||
```
|
||
void LOAD(STRING path)
|
||
```
|
||
|
||
Zastępuje zawartość tablicy danymi wczytanymi z pliku binarnego. Format obejmuje wymiary tablicy oraz wartości komórek.
|
||
|
||
**Parametry**
|
||
|
||
- `path` — ścieżka pliku w VFS gry.
|
||
|
||
### SAVE
|
||
|
||
```
|
||
void SAVE(STRING path)
|
||
```
|
||
|
||
Zapisuje zawartość tablicy do pliku binarnego.
|
||
|
||
**Parametry**
|
||
|
||
- `path` — ścieżka docelowego pliku w VFS gry.
|
||
|
||
## Sygnały
|
||
|
||
### ONINIT
|
||
|
||
Wywoływany w momencie inicjalizacji zmiennej; w tym momencie odczytywana jest wartość pola `DIMENSIONS` i alokowane są wymiary tablicy.
|
||
|
||
### ONSIGNAL
|
||
|
||
Wywoływany po otrzymaniu sygnału (zobacz [Zdarzenia i sygnały](../engine/events.md#onsignal)).
|