CS2 Lua API

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)