Перейти к основному содержимому

Модифицированный RNDX

Быстрая отрисовка графических элементов (замена draw). Является форком оригинальной версии.

Прямоугольник

hook.Add('HUDPaint', 'Test', function()
local w, h = 300, 120
local x, y = (ScrW() - w) / 2, (ScrH() - h) / 2

RNDX.Rect(x, y, w, h)
:Rad(16)
:Color(Mantle.color.panel[1])
:Draw()
end)

Скругление

hook.Add('HUDPaint', 'Test', function()
local w, h = 300, 120
local x, y = (ScrW() - w) / 2, (ScrH() - h) / 2

RNDX.Rect(x, y, w, h)
:Radii(16, 16, 0, 0) -- сверху закругление, снизу нет
:Color(Mantle.color.panel[1])
:Draw()
end)

Обводка

hook.Add('HUDPaint', 'Test', function()
local w, h = 300, 120
local x, y = (ScrW() - w) / 2, (ScrH() - h) / 2

RNDX.Rect(x, y, w, h)
:Rad(16)
:Outline(2)
:Color(Mantle.color.panel[1])
:Draw()
end)

Круг

hook.Add('HUDPaint', 'Test', function()
local cx, cy = ScrW() / 2, ScrH() / 2

RNDX.Circle(cx, cy, 30)
:Color(Color(182, 65, 65))
:Draw()
end)

Тень под фигурой

hook.Add('HUDPaint', 'Test', function()
local w, h = 300, 120
local x, y = (ScrW() - w) / 2, (ScrH() - h) / 2

RNDX.Rect(x, y, w, h)
:Rad(16)
:Shadow(20, 4, 0, 2)
:Draw()

RNDX.Rect(x, y, w, h)
:Rad(16)
:Color(Mantle.color.panel[1])
:Draw()
end)

Размытие фона

hook.Add('HUDPaint', 'Test', function()
local w, h = 300, 120
local x, y = (ScrW() - w) / 2, (ScrH() - h) / 2

RNDX.Rect(x, y, w, h)
:Rad(16)
:Blur(2)
:Draw()
end)

Kawase размытие фона

local blur = 2
local kradius = 1
local kiterations = 4

local function addSlider(parent, text, min, max, decimals, value, setter)
local slider = vgui.Create('MantleSlideBox', parent)
slider:Dock(TOP)
slider:DockMargin(12, 8, 12, 8)
slider:SetText(text)
slider:SetRange(min, max, decimals)
slider:SetValue(value)
slider.OnValueChanged = function(_, val)
setter(val)
end
end

local function openMenu()
local frame = vgui.Create('DFrame')
frame:SetSize(960, 600)
frame:Center()
frame:MakePopup()
frame:SetTitle('')
frame:ShowCloseButton(false)
frame:SetDraggable(true)
frame.Paint = nil

local btnClose = vgui.Create('MantleBtn', frame)
btnClose:SetSize(90, 24)
btnClose:SetPos(frame:GetWide() - 98, 4)
btnClose:SetTxt('Закрыть')
btnClose:SetRadius(8)
btnClose.DoClick = function()
frame:Remove()
end

local settings = vgui.Create('Panel', frame)
settings:Dock(RIGHT)
settings:SetWide(300)
settings:DockMargin(24, 24, 0, 24)
settings.Paint = function(_, w, h)
RNDX.Rect(0, 0, w, h)
:Rad(32)
:Color(Mantle.color.panel[2])
:Draw()
end

addSlider(settings, 'Blur() интенсивность', 0, 12, 1, blur, function(v) blur = v end)
addSlider(settings, 'KBlur радиус', 0, 8, 2, kradius, function(v) kradius = v end)
addSlider(settings, 'KBlur проходы', 1, 4, 0, kiterations, function(v) kiterations = v end)

local main = vgui.Create('Panel', frame)
main:Dock(FILL)
main.Paint = nil

local left = vgui.Create('Panel', main)
left:Dock(LEFT)
left:DockMargin(0, 24, 12, 24)
left.Paint = function(self, w, h)
RNDX.Rect(0, 0, w, h)
:Rad(32)
:Blur(blur)
:Draw()
draw.SimpleText('Обычный блюр', 'Fated.24', w * 0.5, 20, Mantle.color.text, TEXT_ALIGN_CENTER)
end

local right = vgui.Create('Panel', main)
right:Dock(FILL)
right:DockMargin(12, 24, 0, 24)
right.Paint = function(self, w, h)
RNDX.Rect(0, 0, w, h)
:Rad(32)
:KBlur(kiterations, kradius)
:Draw()
draw.SimpleText('Kawase блюр', 'Fated.24', w * 0.5, 20, Mantle.color.text, TEXT_ALIGN_CENTER)
end

main.PerformLayout = function(self, w)
left:SetWide(w * 0.45)
end
end

concommand.Add('mantle_test_blur', function()
openMenu()
end)

Рекомендованное значение - :KBlur(4, 2).

Акриловый материал

local stateAcrylic = {
blur = { enabled = true, iterations = 4, radius = 4 }, -- Фоновое размытие
burn = { enabled = true, color = Color(120, 120, 120), amount = 0.4 }, -- Затемнение
tint = { enabled = true, color = Color(25, 25, 25), amount = 0.4 }, -- Заливка цветом
noise = { enabled = true, intensity = 0.02, scale = 8 }, -- Шум
fresnel = { enabled = true, color = Color(70, 140, 230), amount = 0.3, width = 1.4 } -- Свечение по краям
}

hook.Add('HUDPaint', 'Test', function()
RNDX.Rect(50, 50, 150, 150)
:Rad(16)
:Acrylic(stateAcrylic)
:Draw()
end)

Сектор круга

hook.Add('HUDPaint', 'Test', function()
local cx, cy = ScrW() / 2, ScrH() / 2

-- Угол в градусах: от 0 до 180 (полукруг снизу)
RNDX.Circle(cx, cy, 40)
:Angles(0, 180)
:Color(Mantle.color.theme)
:Draw()
end)

Отрисовка материала

hook.Add('HUDPaint', 'Test', function()
local w, h = 300, 120
local x, y = (ScrW() - w) / 2, (ScrH() - h) / 2

RNDX.Rect(x, y, w, h)
:Rad(12)
:Material(Material('icon16/user.png'))
:Draw()
end)

Конструкторы

КонструкторОписание
RNDX.Rect(int x, int y, int w, int h)Прямоугольник
RNDX.Circle(int x, int y, int radius)Круг по центру

Модификаторы

МодификаторОписание
:Rad(int rad) / :Radii(int tl, int tr, int bl, int br)Скругление углов
:Color(color col)Цвет заливки
:Outline(int thickness)Обводка вместо заливки. По умолчанию 1
:Texture(ITexture) / :Material(IMaterial)Отрисовка текстуры / материала
:Blur(int intensity)Размытие фона внутри фигуры
:KBlur(int iterations, int radius)Kawase размытие фона внутри фигуры
:Fade(int top, int bottom)Вертикальное затухание. Например :Fade(1, 0) прозрачно снизу
:Shadow(int blur, int spread, int offset_x, int offset_y)Тень под фигурой
:Rotation(int deg)Поворот фигуры
:Angles(int start, int end)Сектор круга
:Clip(object panel)Обрезать отрисовку по границам панели
:Flags(int flags)Быстрые флаги: RNDX.NO_TL/TR/BL/BR, RNDX.BLUR, RNDX.MANUAL_COLOR
:Draw()Завершить и нарисовать фигуру