Другие встроенные типы данных¶
Здесь вкратце описаны основные встроенные типы, которые возможно использовать в качестве типов переменных для проектов. Однако многие из этих типов — вроде 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. За базу возьмём следующие два вектора:
Арифметические действия над векторами производятся попарно над каждым элементом обоих векторов, то есть 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.
Технические целочисленные типы¶
Целочисленные типы, которые существуют в 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. Работа со строками".