Фигуры и текст
Рисовать можно внутри событий 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 не сломает остальной интерфейс.