Перейти к содержанию

Другие встроенные типы данных

Здесь вкратце описаны основные встроенные типы, которые возможно использовать в качестве типов переменных для проектов. Однако многие из этих типов — вроде LevelLocals, отвечающей за все данные уровня — использовать как тип своей переменной не имеет смысла.

Векторы

vector2. Составной тип, радиус-вектор на декартовой плоскости. Имеет в себе две переменных типа "double" — "x" и "y":

vector2 vec = (2.125, 3);

console.printf( "vec: " .. vec );
// Вывод — «vec: (2.12500, 3.00000)».

console.printf( "x: " .. vec.x .. ", y: " .. vec.y );
// Вывод — «x: 2.12500, y: 3.00000».

vector3. Составной тип, радиус-вектор в пространстве. Имеет в себе три переменных типа double — "x", "y" и "z". Один из самых используемых для расчётов и позиционирования в игровом мире.

Помимо полей "x", "y" и "z", этот тип также включает в себя поле "xy" типа vector2, соответствующую одноимённой паре координат:

vector3 vec = (1, 2, 3);

console.printf( "x: " .. vec.x .. ", y: " .. vec.y .. ", z: " .. vec.z );
// Вывод — «x: 1.00000, y: 2.00000, z: 3.00000».

console.printf( "xy: " .. vec.xy );
// Вывод — «xy: (1.00000, 2.00000)».

Операции над векторами

Для векторов определено много операций, чуть больше, чем для double.

Исходные данные для этого раздела

Далее будут использоваться векторы с названиями a и b. За базу возьмём следующие два вектора:

vector3 a = (4, 1, 0);
vector3 b = (2, 3.5, 4);

Арифметические действия над векторами производятся попарно над каждым элементом обоих векторов, то есть a.x с b.x, a.y с b.y и, если вектор трёхмерный, то и a.z с b.z:

a + b == (6, 4.5, 4)

a - b == (2, -2.5, -4)

a / b == (2, 0.285714, 0)
a / 2 == (2, 0.5, 0)  // Операции с константой также производятся над всеми элементами вектора.

a * b == (8, 3.5, 0)
a * 2 == (4, 7, 8)

Методы векторов

Все методы векторов определены как для vector2, так и для vector3. Примеры приводятся для тех же исходных данных вектора a.

Метод length() вычисляет длину вектора: a.length() == $ \sqrt{ a.x^2 + a.y^2 + a.z^2 } $ == 4.123106.

Метод unit() вычисляет нормализованный вектор (то есть оставляет только направление, длина становится равна 1.0). Поэтому:

  • Численно равен $ \frac{ \mathbf{a}}{|\mathbf{a}| } $ — вектор, делённый на собственную длину.
  • a.unit() == (0.970144, 0.242536, 0).
  • a.unit().length() == 1.0, и результат равен "1.0" при любых значениях исходного вектора.

Скалярное и векторное произведение

Для произведения векторов существует два отдельных оператора. Примеры приводятся для тех же исходных данных вектора a и b.

Скалярное произведение векторов ($ a \cdot b $) записывается как a dot b. Определён как для vector2, так и для vector3:

  • Численно равно $ |\mathbf{a}| \cdot |\mathbf{b}| \cdot \cos( \widehat{\mathbf{a}, \mathbf{b}} ) $ (перемножению длин векторов на косинус угла между ними).
  • Часто используется для получения угла между векторами — меру того, насколько их направления "похожи" друг на друга.

Векторное умножение векторов (записывается как $ a \times b $, определён только для vector3): a cross b.

             │  i   j   k  │
a cross b == │ a.x a.y a.z │ =[в нашем случае]= (4; -16; 12)
             │ b.x b.y b.z │

Технические целочисленные типы

Целочисленные типы, которые существуют в ZScript, но которые без чёткого понимания использовать не рекомендуется.

int8, int16: Знаковые целочисленные с изменённой битностью. В int8 восемь бит, то есть один байт, значения — от -128 до 127. В int16 16 бит (два байта), диапазон — от -32768 до 32767.

uint8, uint16: Беззнаковые целочисленные изменённой длины. uint8 занимает один байт, диапазон — от 0 до 255. uint16 занимает два байта, диапазон — от 0 до 65535.

Встроенные ("нативные") структуры

Перечислены не все. Некоторые имеют малую практическую пользу и используются неимоверно редко.

CVar

Внешняя переменная, записываемая в конфигурационный файл.

Font

Структура, отвечающая за шрифты внутри игры.

TexMan

Расшифровывается как "Менеджер текстур". Через эту структуру можно получать, анализировать и даже, пусть и ограничено, но оперировать всей графикой: текстурами, спрайтами и другими картинками.

Screen

Работа напрямую с экраном. Зачастую гораздо удобнее оборачивать вызовы к ней во что-то чуть более читабельное.

Console

Работа с консолью, текстовый вывод.

Translation

Структура, позволяющая в некотором роде манипулировать трансляциями (перекраской) спрайтов.

DropItem

Информация о выпадающих при некоторых вызовах акторах (например, после убийства зомби-сержанта падает дробовик).

StringTable

Структура, связанная с таблицей локализаций (переводов на разные языки). используется для получения локализации для той или иной строки. Аналог префикса "l:" в ACS.

Wads

Структура работы с файлами (см. 3.15. "Работа с произвольными файлами").

Shader

Управление шейдерами и иной графической постобработкой.

TraceResults

Используется в class LineTracer (см. ниже) в качестве хранилища информации о полученном трассировкой объекте.

Иные встроенные типы данных

class LineTracer

Настраиваемый класс трассировки. Использует стркутуру TraceResults (см. выше).

TextureID

Идентификатор текстуры, по совместительству её смещение в памяти относительно начала таблицы текстур. Не строка, не название! В основном используется в вызовах TexMan.

class HUDFont

Класс работы со шрифтами, выводимыми в HUD.

class BrokenLines

Вспомогательный класс автоматического разбиения длинного текста на строки. Подробнее можно будет посмотреть, возможно, в "1.08. Работа со строками".