render: стеки
Пары push_* / pop_* меняют рисование фигур, нарисованных между ними: обрезка, сглаживание, размытие фона, тень, поворот, маска и свечение. Все функции работают только внутри события render.
После каждого кадра незакрытые
push_*сбрасываются автоматически, так что забытыйpop_*не испортит следующие кадры. Но внутри кадра он повлияет на всё, что нарисовано после него.
render.push_clip_rect(pos: vector2, size: vector2, intersect?: boolean)#
Обрезает дальнейшее рисование прямоугольником [pos, pos + size].
| Параметр | Тип | Описание |
|---|---|---|
pos |
vector2 |
левый верхний угол области |
size |
vector2 |
размер области |
intersect |
boolean |
true — пересечь с текущей областью обрезки; по умолчанию false |
Возвращает: ничего.
-- Полоса прогресса: заливка обрезается по доле
local progress = 0
events.render:set(function()
progress = (progress + globals.frametime * 0.25) % 1
local pos, size = vector2(20, 560), vector2(200, 10)
render.rect(pos, size, color(40, 40, 40, 255), 4)
render.push_clip_rect(pos, vector2(size.x * progress, size.y))
render.rect(pos, size, color(0, 180, 255, 255), 4)
render.pop_clip_rect()
end)
render.pop_clip_rect()#
Снимает последнюю область обрезки. На пустом стеке ничего не делает.
Возвращает: ничего.
events.render:set(function()
render.push_clip_rect(vector2(20, 600), vector2(60, 20))
render.rect(vector2(20, 600), vector2(120, 20), color(255, 0, 0, 255)) -- видна половина
render.pop_clip_rect()
end)
render.push_smoothing(n: number)#
Задаёт сглаживание краёв следующих фигур.
| Параметр | Тип | Описание |
|---|---|---|
n |
number |
сила сглаживания |
Возвращает: ничего.
events.render:set(function()
render.push_smoothing(1)
render.rect(vector2(240, 560), vector2(60, 60), color(255, 200, 0, 255), 20)
render.pop_smoothing()
end)
render.pop_smoothing()#
Возвращает сглаживание к 0.
Возвращает: ничего.
events.render:set(function()
render.push_smoothing(2)
render.circle(vector2(340, 590), color(255, 255, 255, 255), 20)
render.pop_smoothing()
end)
render.push_blur(strength?: number)#
Включает размытый фон под следующими фигурами.
| Параметр | Тип | Описание |
|---|---|---|
strength |
number |
сила размытия, по умолчанию 1 |
Возвращает: ничего.
-- Полупрозрачная панель с размытым фоном
events.render:set(function()
render.push_blur(1)
render.rect(vector2(20, 640), vector2(200, 60), color(255, 255, 255, 60), 8)
render.pop_blur()
end)
render.pop_blur()#
Выключает размытие фона.
Возвращает: ничего.
events.render:set(function()
render.push_blur(2)
render.rect(vector2(240, 640), vector2(120, 60), color(0, 0, 0, 80), 8)
render.pop_blur()
end)
render.push_shadow()#
Отмечает начало фигуры, к которой pop_shadow прицепит тень.
Возвращает: ничего.
events.render:set(function()
render.push_shadow()
render.rect(vector2(20, 720), vector2(80, 40), color(60, 60, 60, 255), 6)
render.pop_shadow(color(255, 0, 0, 200), 20, vector2(0, 4))
end)
render.pop_shadow(col: color, size: number, offset?: vector2)#
Добавляет тень к фигуре, нарисованной после push_shadow. Без push_shadow ничего не делает.
| Параметр | Тип | Описание |
|---|---|---|
col |
color |
цвет тени |
size |
number |
размер тени |
offset |
vector2 |
смещение, по умолчанию (0, 0) |
Возвращает: ничего.
events.render:set(function()
render.push_shadow()
render.circle(vector2(150, 740), color(255, 255, 255, 255), 16)
render.pop_shadow(color(0, 150, 255, 255), 16)
end)
render.push_rotation(degrees: number, center?: vector2)#
Поворачивает всё, что нарисовано до pop_rotation.
| Параметр | Тип | Описание |
|---|---|---|
degrees |
number |
угол, градусы (см. предупреждение) |
center |
vector2 |
центр поворота; по умолчанию — середина нарисованного |
- Вложенности нет: повторный
push_rotationзаменяет предыдущий.
Фактический поворот равен
90 - degrees:push_rotation(90)ничего не поворачивает,push_rotation(0)поворачивает на 90°. Чтобы повернуть на уголa, передавайте90 - a.
Возвращает: ничего.
-- Вращающийся квадрат
local a = 0
events.render:set(function()
a = (a + globals.frametime * 90) % 360
render.push_rotation(90 - a)
render.rect(vector2(220, 720), vector2(40, 40), color(0, 200, 255, 255), 4)
render.pop_rotation()
end)
render.pop_rotation()#
Применяет поворот из push_rotation. Без push_rotation — ошибка pop_rotation called without call to push_rotation.
Возвращает: ничего.
events.render:set(function()
render.push_rotation(45) -- поворот на 45°
render.rect(vector2(300, 720), vector2(60, 20), color(255, 128, 0, 255), 4)
render.pop_rotation()
end)
render.push_clip_shader()#
Начинает маску: всё, что нарисовано до pop_clip_shader_rect или pop_clip_shader_circle, будет видно только внутри заданной ими фигуры. Повторный push_clip_shader без pop пропускается.
Возвращает: ничего.
-- Градиент, видимый только внутри скруглённого прямоугольника
events.render:set(function()
local pos, size = vector2(400, 720), vector2(100, 40)
render.push_clip_shader()
render.rect_gradient(pos, size, color(255, 0, 0, 255), color(0, 255, 0, 255), color(0, 0, 255, 255), color(255, 255, 0, 255))
render.pop_clip_shader_rect(pos, size, nil, 12)
end)
render.pop_clip_shader_rect(pos: vector2, size: vector2, col?: color, rounding?: number|table)#
Закрывает маску прямоугольником. Без push_clip_shader ничего не делает.
| Параметр | Тип | Описание |
|---|---|---|
pos |
vector2 |
левый верхний угол маски |
size |
vector2 |
размер маски |
col |
color |
цвет маски, по умолчанию белый |
rounding |
number или table |
скругление маски |
Возвращает: ничего.
events.render:set(function()
render.push_clip_shader()
render.rect(vector2(520, 720), vector2(80, 40), color(255, 80, 0, 255))
render.pop_clip_shader_rect(vector2(520, 720), vector2(80, 40), nil, 20)
end)
render.pop_clip_shader_circle(center: vector2, radius: number, start?: number, pct?: number)#
Закрывает маску кругом или сектором. Без push_clip_shader ничего не делает.
| Параметр | Тип | Описание |
|---|---|---|
center |
vector2 |
центр |
radius |
number |
радиус |
start |
number |
начальный угол, градусы; по умолчанию 0 |
pct |
number |
доля круга; по умолчанию 1 |
Возвращает: ничего.
events.render:set(function()
render.push_clip_shader()
render.rect(vector2(620, 720), vector2(40, 40), color(255, 128, 0, 255))
render.pop_clip_shader_circle(vector2(640, 740), 18)
end)
render.push_complex_shadow()#
Начинает свечение: геометрия до pop_complex_shadow получит свечение. Повторный вызов без pop пропускается.
Возвращает: ничего.
events.render:set(function()
render.push_complex_shadow()
render.circle(vector2(700, 740), color(255, 255, 255, 255), 16)
render.pop_complex_shadow(color(255, 0, 255, 255))
end)
render.pop_complex_shadow(col: color, cutout?: boolean, mode?: boolean)#
Применяет свечение к геометрии после push_complex_shadow. Без push_complex_shadow ничего не делает.
| Параметр | Тип | Описание |
|---|---|---|
col |
color |
цвет свечения |
cutout |
boolean |
true — заливка фигуры вырезается, остаётся только свечение вокруг неё; по умолчанию false |
mode |
boolean |
false — более широкое и сильное свечение; true и не передано — обычное свечение (одинаково) |
Возвращает: ничего.
events.render:set(function()
render.push_complex_shadow()
render.rect(vector2(740, 720), vector2(60, 40), color(255, 255, 255, 255), 6)
render.pop_complex_shadow(color(0, 255, 255, 255), true)
end)