Документация
Скрипты
К скриптам
Рисование

Фигуры и текст

Рисовать можно внутри событий render2d и render3d. Снаружи вызовы не падают, а просто ничего не делают — контекст отрисовки живёт только в этих колбэках.

Цвет

Цвет везде — одно целое число ARGB. Его собирают из компонентов или берут из темы клиента.

local white = render.rgba(255, 255, 255, 255)
local theme = render.theme()

render.rounded_rect(x, y, w, h, 4, render.with_alpha(theme.background, theme.alpha))
render.rounded_rect(x, y, w * 0.5, h, 4, theme.main)

В теме лежат main, background, border, text, text_inactive, alpha, rounding и другие поля. Если брать цвета оттуда, скрипт меняется вместе с темой клиента.

Фигуры

render.rect(x, y, w, h, color)прямоугольник, координаты целые
render.rounded_rect(x, y, w, h, radius, color)скруглённый
render.outline_rect(x, y, w, h, radius, color, thickness)рамка; восьмым аргументом — цвет заливки
render.rect_style(x, y, w, h, radius)панель в стиле темы: блюр или стекло плюс фон
render.gradient_rect(x, y, w, h, c1, c2, c3, c4)углы: левый низ, правый низ, правый верх, левый верх
render.circle(cx, cy, radius, color)круг по центру
render.arc(cx, cy, inner, outer, start, end, from, to)дуга и кольцо, углы в градусах
render.line(x1, y1, x2, y2, color, thickness)линия
render.blur(x, y, w, h, radius, strength)размытие фона
render.bloom(x, y, w, h, radius, softness, color)свечение

Блюр — отдельный проход шейдера на каждый вызов. Для панели это незаметно, для списка из десяти строк — двадцать проходов за кадр, поэтому его обычно выносят в галочку.

Текст

Координата y во всех шрифтовых функциях — верх заглавной буквы. Благодаря этому строки с разными буквами стоят на одной линии, и поправки вида «плюс полтора пикселя» не нужны.

render.font_text(text, x, y, color, size, family)обычный текст
render.font_text_middle(text, x, cy, color, size, family)cy — середина строки: центрирует по вертикали
render.font_text_box(text, x, y, w, h, color, size, family)по центру прямоугольника
render.font_text_outline(text, x, y, color, outline, size, family)с обводкой, читается на любом фоне
render.font_width(text, size, family)ширина строки
render.font_height(size, family)высота заглавной буквы
render.ellipsis(text, max_width, size, family)обрезка с многоточием

Семейства: medium, bold, light, regular, consolas. Размер от 4 до 32.

Анимации

Именованная анимация хранит значение между кадрами сама и считает шаг по времени кадра, поэтому скорость одинаковая при любом фпс.

local k = render.animate("target", aura.has_target() and 1 or 0, 8)

if k > 0.01 then
    render.push_matrix()
    render.scale_at(x + w / 2, y + h / 2, 0.9 + 0.1 * k)
    render.rect_style(x, y, w, h, 6)
    render.pop_matrix()
end

Ключ — любая строка, уникальная внутри скрипта. Для строк списка удобно склеивать её с именем: "row_" .. module.name.

Матрица и обрезка

render.push_matrix() / pop_matrix()сохранить и вернуть матрицу
render.scale_at(cx, cy, scale)масштаб вокруг точки
render.rotate(degrees, cx, cy)поворот вокруг точки
render.push_clip(x, y, w, h) / pop_clip()обрезка, целые координаты

Незакрытые push_matrix и push_clip снимаются автоматически в конце кадра, так что забытый pop не сломает остальной интерфейс.