Files
mmkrp_2026/addons/_libnyx/lua/libnyx/lib/rndx.lua
2026-03-15 14:54:49 +03:00

757 lines
32 KiB
Lua

-- libNyx and LiquidGlass shader by MaryBlackfild
-- JOIN DISCORD: https://discord.gg/rUEEz4mfXw
if SERVER then
AddCSLuaFile()
return
end
if _G.gSims_RNDX then
return _G.gSims_RNDX
end
local bit_band = bit.band
local surface_SetDrawColor = surface.SetDrawColor
local surface_SetMaterial = surface.SetMaterial
local surface_DrawTexturedRectUV = surface.DrawTexturedRectUV
local surface_DrawTexturedRect = surface.DrawTexturedRect
local render_CopyRenderTargetToTexture = render.CopyRenderTargetToTexture
local math_min = math.min
local math_max = math.max
local DisableClipping = DisableClipping
local type = type
local SHADERS_VERSION = "1762169883"
local SHADERS_GMA = [========[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]========]
do
if _G.gSims_RNDX_ShaderMounted ~= SHADERS_VERSION then
local dec = util.Base64Decode(SHADERS_GMA)
if dec and #dec > 0 then
local path = "rndx_shaders_" .. SHADERS_VERSION .. ".gma"
file.Write(path, dec)
game.MountGMA("data/" .. path)
_G.gSims_RNDX_ShaderMounted = SHADERS_VERSION
end
end
end
local function GET_SHADER(name)
return SHADERS_VERSION:gsub("%.", "_") .. "_" .. name
end
local BLUR_RT = GetRenderTargetEx(
"RNDX" .. SHADERS_VERSION .. SysTime(),
1024,
1024,
RT_SIZE_LITERAL,
MATERIAL_RT_DEPTH_SEPARATE,
bit.bor(2, 256, 4, 8),
0,
IMAGE_FORMAT_BGRA8888
)
local NEW_FLAG do
local flags_n = -1
function NEW_FLAG()
flags_n = flags_n + 1
return 2 ^ flags_n
end
end
local NO_TL, NO_TR, NO_BL, NO_BR = NEW_FLAG(), NEW_FLAG(), NEW_FLAG(), NEW_FLAG()
local SHAPE_CIRCLE, SHAPE_FIGMA, SHAPE_IOS = NEW_FLAG(), NEW_FLAG(), NEW_FLAG()
local BLUR = NEW_FLAG()
local RNDX = {}
local _fb_frame = -1
function RNDX.EnsureFB()
local f = FrameNumber()
if _fb_frame ~= f then
render.UpdateScreenEffectTexture()
_fb_frame = f
end
end
local shader_mat = [==[
screenspace_general
{
$pixshader ""
$vertexshader ""
$basetexture ""
$texture1 ""
$texture2 ""
$texture3 ""
$ignorez 1
$vertexcolor 1
$vertextransform 1
"<dx90" { $no_draw 1 }
$copyalpha 0
$alpha_blend_color_overlay 0
$alpha_blend 1
$linearwrite 1
$linearread_basetexture 1
$linearread_texture1 1
$linearread_texture2 1
$linearread_texture3 1
}
]==]
local MATRIXES = {}
local MATREG = _G.gSims_RNDX_MATREG or {}
_G.gSims_RNDX_MATREG = MATREG
local function create_shader_mat(name, opts)
local key = "gsims/rndx/" .. name
local mat = MATREG[key]
if not mat then
local kv = util.KeyValuesToTable(shader_mat, false, true)
if opts then
for k, v in pairs(opts) do
kv[k] = v
end
end
mat = CreateMaterial(key, "screenspace_general", kv)
MATRIXES[mat] = Matrix()
MATREG[key] = mat
end
return mat
end
local ROUNDED_MAT = create_shader_mat("rounded", {
["$pixshader"] = GET_SHADER("rndx_rounded_ps30"),
["$vertexshader"] = GET_SHADER("rndx_vertex_vs30")
})
local ROUNDED_TEXTURE_MAT = create_shader_mat("rounded_texture", {
["$pixshader"] = GET_SHADER("rndx_rounded_ps30"),
["$vertexshader"] = GET_SHADER("rndx_vertex_vs30"),
["$basetexture"] = "loveyoumom"
})
local BLUR_VERTICAL = "$c0_x"
local ROUNDED_BLUR_MAT = create_shader_mat("blur_horizontal", {
["$pixshader"] = GET_SHADER("rndx_rounded_blur_ps30"),
["$vertexshader"] = GET_SHADER("rndx_vertex_vs30"),
["$basetexture"] = BLUR_RT:GetName(),
["$texture1"] = "_rt_FullFrameFB"
})
local SHADOWS_MAT = create_shader_mat("rounded_shadows", {
["$pixshader"] = GET_SHADER("rndx_shadows_ps30"),
["$vertexshader"] = GET_SHADER("rndx_vertex_vs30")
})
local SHADOWS_BLUR_MAT = create_shader_mat("shadows_blur_horizontal", {
["$pixshader"] = GET_SHADER("rndx_shadows_blur_ps30"),
["$vertexshader"] = GET_SHADER("rndx_vertex_vs30"),
["$basetexture"] = BLUR_RT:GetName(),
["$texture1"] = "_rt_FullFrameFB"
})
local LIQUID_MAT = create_shader_mat("liquid", {
["$pixshader"] = GET_SHADER("rndx_liquid_ps30"),
["$vertexshader"] = GET_SHADER("rndx_vertex_vs30"),
["$texture1"] = "_rt_FullFrameFB"
})
local LIQ_TIME, LIQ_STR, LIQ_ALPHA = "$c0_y", "$c0_z", "$c0_w"
local LIQ_SHIM, LIQ_SAT, LIQ_TINTS, LIQ_GRAIN = "$c1_x", "$c1_y", "$c1_z", "$c1_w"
local LIQ_TR, LIQ_TG, LIQ_TB = "$c2_x", "$c2_y", "$c2_z"
local LIQ_BLUR_ALL, LIQ_BLUR_RAD, LIQ_SMOOTHK = "$c3_x", "$c3_y", "$c3_z"
local SHAPES = {
[SHAPE_CIRCLE] = 2,
[SHAPE_FIGMA] = 2.2,
[SHAPE_IOS] = 4
}
local DEFAULT_SHAPE = SHAPE_FIGMA
local MATERIAL_SetTexture = ROUNDED_MAT.SetTexture
local MATERIAL_SetMatrix = ROUNDED_MAT.SetMatrix
local MATERIAL_SetFloat = ROUNDED_MAT.SetFloat
local MATRIX_SetUnpacked = Matrix().SetUnpacked
local MAT
local X, Y, W, H
local TL, TR, BL, BR
local TEXTURE
local USING_BLUR, BLUR_INTENSITY
local COL_R, COL_G, COL_B, COL_A
local SHAPE, OUTLINE_THICKNESS
local START_ANGLE, END_ANGLE, ROTATION
local CLIP_PANEL
local SHADOW_ENABLED, SHADOW_SPREAD, SHADOW_INTENSITY
local function RESET_PARAMS()
MAT = nil
X, Y, W, H = 0, 0, 0, 0
TL, TR, BL, BR = 0, 0, 0, 0
TEXTURE = nil
USING_BLUR, BLUR_INTENSITY = false, 1.0
COL_R, COL_G, COL_B, COL_A = 255, 255, 255, 255
SHAPE, OUTLINE_THICKNESS = SHAPES[DEFAULT_SHAPE], -1
START_ANGLE, END_ANGLE, ROTATION = 0, 360, 0
CLIP_PANEL = nil
SHADOW_ENABLED, SHADOW_SPREAD, SHADOW_INTENSITY = false, 0, 0
end
local normalize_corner_radii do
local HUGE = math.huge
local function nzr(x)
if x ~= x or x < 0 then
return 0
end
local lim = math_min(W, H)
if x == HUGE then
return lim
end
return x
end
local function clamp0(x)
return x < 0 and 0 or x
end
function normalize_corner_radii()
local TL_, TR_, BL_, BR_ = nzr(TL), nzr(TR), nzr(BL), nzr(BR)
local k = math_max(
1,
(TL_ + TR_) / W,
(BL_ + BR_) / W,
(TL_ + BL_) / H,
(TR_ + BR_) / H
)
if k > 1 then
local inv = 1 / k
TL_, TR_, BL_, BR_ = TL_ * inv, TR_ * inv, BL_ * inv, BR_ * inv
end
return clamp0(TL_), clamp0(TR_), clamp0(BL_), clamp0(BR_)
end
end
local function SetupDraw()
local TL_, TR_, BL_, BR_ = normalize_corner_radii()
local matrix = MATRIXES[MAT]
MATRIX_SetUnpacked(
matrix,
BL_, W, OUTLINE_THICKNESS or -1, END_ANGLE,
BR_, H, SHADOW_INTENSITY, ROTATION,
TR_, SHAPE, BLUR_INTENSITY or 1.0, 0,
TL_, TEXTURE and 1 or 0, START_ANGLE, 0
)
MATERIAL_SetMatrix(MAT, "$viewprojmat", matrix)
if COL_R then
surface_SetDrawColor(COL_R, COL_G, COL_B, COL_A)
end
surface_SetMaterial(MAT)
end
local MANUAL_COLOR = NEW_FLAG()
local DEFAULT_DRAW_FLAGS = DEFAULT_SHAPE
local function draw_rounded(x, y, w, h, col, flags, tl, tr, bl, br, texture, thickness)
if col and col.a == 0 then
return
end
RESET_PARAMS()
if not flags then
flags = DEFAULT_DRAW_FLAGS
end
local using_blur = bit_band(flags, BLUR) ~= 0
if using_blur then
return RNDX.DrawBlur(x, y, w, h, flags, tl, tr, bl, br, thickness)
end
MAT = ROUNDED_MAT
if texture then
MAT = ROUNDED_TEXTURE_MAT
MATERIAL_SetTexture(MAT, "$basetexture", texture)
TEXTURE = texture
end
W, H = w, h
TL, TR, BL, BR =
bit_band(flags, NO_TL) == 0 and tl or 0,
bit_band(flags, NO_TR) == 0 and tr or 0,
bit_band(flags, NO_BL) == 0 and bl or 0,
bit_band(flags, NO_BR) == 0 and br or 0
SHAPE = SHAPES[bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS)] or SHAPES[DEFAULT_SHAPE]
OUTLINE_THICKNESS = thickness
if bit_band(flags, MANUAL_COLOR) ~= 0 then
COL_R = nil
elseif col then
COL_R, COL_G, COL_B, COL_A = col.r, col.g, col.b, col.a
else
COL_R, COL_G, COL_B, COL_A = 255, 255, 255, 255
end
SetupDraw()
return surface_DrawTexturedRectUV(x, y, w, h, -0.015625, -0.015625, 1.015625, 1.015625)
end
function RNDX.Draw(r, x, y, w, h, col, flags)
return draw_rounded(x, y, w, h, col, flags, r, r, r, r)
end
function RNDX.DrawOutlined(r, x, y, w, h, col, thickness, flags)
return draw_rounded(x, y, w, h, col, flags, r, r, r, r, nil, thickness or 1)
end
function RNDX.DrawTexture(r, x, y, w, h, col, texture, flags)
return draw_rounded(x, y, w, h, col, flags, r, r, r, r, texture)
end
function RNDX.DrawMaterial(r, x, y, w, h, col, mat, flags)
local tex = mat:GetTexture("$basetexture")
if tex then
return RNDX.DrawTexture(r, x, y, w, h, col, tex, flags)
end
end
function RNDX.DrawCircle(x, y, r, col, flags)
return RNDX.Draw(r / 2, x - r / 2, y - r / 2, r, r, col, (flags or 0) + SHAPE_CIRCLE)
end
function RNDX.DrawCircleOutlined(x, y, r, col, thickness, flags)
return RNDX.DrawOutlined(r / 2, x - r / 2, y - r / 2, r, r, col, thickness, (flags or 0) + SHAPE_CIRCLE)
end
function RNDX.DrawCircleTexture(x, y, r, col, texture, flags)
return RNDX.DrawTexture(r / 2, x - r / 2, y - r / 2, r, r, col, texture, (flags or 0) + SHAPE_CIRCLE)
end
function RNDX.DrawCircleMaterial(x, y, r, col, mat, flags)
local tex = mat:GetTexture("$basetexture")
if tex then
return RNDX.DrawTexture(r / 2, x - r / 2, y - r / 2, r, r, col, tex, (flags or 0) + SHAPE_CIRCLE)
end
end
local USE_SHADOWS_BLUR = false
local function draw_blur()
if USE_SHADOWS_BLUR then
MAT = SHADOWS_BLUR_MAT
else
MAT = ROUNDED_BLUR_MAT
end
COL_R, COL_G, COL_B, COL_A = 255, 255, 255, 255
SetupDraw()
render_CopyRenderTargetToTexture(BLUR_RT)
MATERIAL_SetFloat(MAT, BLUR_VERTICAL, 0)
surface_DrawTexturedRect(X, Y, W, H)
render_CopyRenderTargetToTexture(BLUR_RT)
MATERIAL_SetFloat(MAT, BLUR_VERTICAL, 1)
surface_DrawTexturedRect(X, Y, W, H)
end
function RNDX.DrawBlur(x, y, w, h, flags, tl, tr, bl, br, thickness)
RESET_PARAMS()
if not flags then
flags = DEFAULT_DRAW_FLAGS
end
X, Y = x, y
W, H = w, h
TL, TR, BL, BR =
bit_band(flags, NO_TL) == 0 and tl or 0,
bit_band(flags, NO_TR) == 0 and tr or 0,
bit_band(flags, NO_BL) == 0 and bl or 0,
bit_band(flags, NO_BR) == 0 and br or 0
SHAPE = SHAPES[bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS)] or SHAPES[DEFAULT_SHAPE]
OUTLINE_THICKNESS = thickness
draw_blur()
end
local function setup_shadows()
X = X - SHADOW_SPREAD
Y = Y - SHADOW_SPREAD
W = W + SHADOW_SPREAD * 2
H = H + SHADOW_SPREAD * 2
TL = TL + SHADOW_SPREAD * 2
TR = TR + SHADOW_SPREAD * 2
BL = BL + SHADOW_SPREAD * 2
BR = BR + SHADOW_SPREAD * 2
end
local function draw_shadows(r, g, b, a)
if USING_BLUR then
USE_SHADOWS_BLUR = true
draw_blur()
USE_SHADOWS_BLUR = false
end
MAT = SHADOWS_MAT
if r == false then
COL_R = nil
else
COL_R, COL_G, COL_B, COL_A = r, g, b, a
end
SetupDraw()
surface_DrawTexturedRectUV(X, Y, W, H, -0.015625, -0.015625, 1.015625, 1.015625)
end
function RNDX.DrawShadowsEx(x, y, w, h, col, flags, tl, tr, bl, br, spread, intensity, thickness)
if col and col.a == 0 then
return
end
local OLD = DisableClipping(true)
RESET_PARAMS()
if not flags then
flags = DEFAULT_DRAW_FLAGS
end
X, Y = x, y
W, H = w, h
SHADOW_SPREAD = spread or 30
SHADOW_INTENSITY = intensity or SHADOW_SPREAD * 1.2
TL, TR, BL, BR =
bit_band(flags, NO_TL) == 0 and tl or 0,
bit_band(flags, NO_TR) == 0 and tr or 0,
bit_band(flags, NO_BL) == 0 and bl or 0,
bit_band(flags, NO_BR) == 0 and br or 0
SHAPE = SHAPES[bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS)] or SHAPES[DEFAULT_SHAPE]
OUTLINE_THICKNESS = thickness
setup_shadows()
USING_BLUR = bit_band(flags, BLUR) ~= 0
if bit_band(flags, MANUAL_COLOR) ~= 0 then
draw_shadows(false, nil, nil, nil)
elseif col then
draw_shadows(col.r, col.g, col.b, col.a)
else
draw_shadows(0, 0, 0, 255)
end
DisableClipping(OLD)
end
function RNDX.DrawShadows(r, x, y, w, h, col, spread, intensity, flags)
return RNDX.DrawShadowsEx(x, y, w, h, col, flags, r, r, r, r, spread, intensity)
end
function RNDX.DrawShadowsOutlined(r, x, y, w, h, col, thickness, spread, intensity, flags)
return RNDX.DrawShadowsEx(x, y, w, h, col, flags, r, r, r, r, spread, intensity, thickness or 1)
end
local BASE_FUNCS do
BASE_FUNCS = {
Rad = function(self, rad)
TL, TR, BL, BR = rad, rad, rad, rad
return self
end,
Radii = function(self, tl, tr, bl, br)
TL, TR, BL, BR = tl or 0, tr or 0, bl or 0, br or 0
return self
end,
Texture = function(self, texture)
TEXTURE = texture
return self
end,
Material = function(self, mat)
local tex = mat:GetTexture("$basetexture")
if tex then
TEXTURE = tex
end
return self
end,
Outline = function(self, thickness)
OUTLINE_THICKNESS = thickness
return self
end,
Shape = function(self, shape)
SHAPE = SHAPES[shape] or 2.2
return self
end,
Color = function(self, cr, g, b, a)
if type(cr) == "number" then
COL_R, COL_G, COL_B, COL_A = cr, g or 255, b or 255, a or 255
else
COL_R, COL_G, COL_B, COL_A = cr.r, cr.g, cr.b, cr.a
end
return self
end,
Blur = function(self, intensity)
intensity = intensity or 1.0
intensity = math_max(intensity, 0)
USING_BLUR, BLUR_INTENSITY = true, intensity
return self
end,
Rotation = function(self, ang)
ROTATION = math.rad(ang or 0)
return self
end,
StartAngle = function(self, a)
START_ANGLE = a or 0
return self
end,
EndAngle = function(self, a)
END_ANGLE = a or 360
return self
end,
Shadow = function(self, spread, intensity)
SHADOW_ENABLED, SHADOW_SPREAD, SHADOW_INTENSITY =
true, spread or 30, intensity or (spread or 30) * 1.2
return self
end,
Clip = function(self, pnl)
CLIP_PANEL = pnl
return self
end,
Flags = function(self, flags)
flags = flags or 0
if bit_band(flags, NO_TL) ~= 0 then TL = 0 end
if bit_band(flags, NO_TR) ~= 0 then TR = 0 end
if bit_band(flags, NO_BL) ~= 0 then BL = 0 end
if bit_band(flags, NO_BR) ~= 0 then BR = 0 end
local shape_flag = bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS)
if shape_flag ~= 0 then
SHAPE = SHAPES[shape_flag] or SHAPES[DEFAULT_SHAPE]
end
if bit_band(flags, BLUR) ~= 0 then
BASE_FUNCS.Blur(self)
end
if bit_band(flags, MANUAL_COLOR) ~= 0 then
COL_R = nil
end
return self
end
}
end
local RECT = {
Rad = BASE_FUNCS.Rad,
Radii = BASE_FUNCS.Radii,
Texture = BASE_FUNCS.Texture,
Material = BASE_FUNCS.Material,
Outline = BASE_FUNCS.Outline,
Shape = BASE_FUNCS.Shape,
Color = BASE_FUNCS.Color,
Blur = BASE_FUNCS.Blur,
Rotation = BASE_FUNCS.Rotation,
StartAngle = BASE_FUNCS.StartAngle,
EndAngle = BASE_FUNCS.EndAngle,
Clip = BASE_FUNCS.Clip,
Shadow = BASE_FUNCS.Shadow,
Flags = BASE_FUNCS.Flags,
Draw = function(self)
if START_ANGLE == END_ANGLE then
return
end
local OLD
if SHADOW_ENABLED or CLIP_PANEL then
OLD = DisableClipping(true)
end
if CLIP_PANEL then
local sx, sy = CLIP_PANEL:LocalToScreen(0, 0)
local sw, sh = CLIP_PANEL:GetSize()
render.SetScissorRect(sx, sy, sx + sw, sy + sh, true)
end
if SHADOW_ENABLED then
setup_shadows()
draw_shadows(COL_R, COL_G, COL_B, COL_A)
elseif USING_BLUR then
draw_blur()
else
if TEXTURE then
MAT = ROUNDED_TEXTURE_MAT
MATERIAL_SetTexture(MAT, "$basetexture", TEXTURE)
else
MAT = ROUNDED_MAT
end
SetupDraw()
surface_DrawTexturedRectUV(X, Y, W, H, -0.015625, -0.015625, 1.015625, 1.015625)
end
if CLIP_PANEL then
render.SetScissorRect(0, 0, 0, 0, false)
end
if SHADOW_ENABLED or CLIP_PANEL then
DisableClipping(OLD)
end
end,
GetMaterial = function(self)
if SHADOW_ENABLED or USING_BLUR then
error("You can't get the material of a shadowed or blurred rectangle!")
end
if TEXTURE then
MAT = ROUNDED_TEXTURE_MAT
MATERIAL_SetTexture(MAT, "$basetexture", TEXTURE)
else
MAT = ROUNDED_MAT
end
SetupDraw()
return MAT
end
}
local CIRCLE = {
Texture = BASE_FUNCS.Texture,
Material = BASE_FUNCS.Material,
Outline = BASE_FUNCS.Outline,
Color = BASE_FUNCS.Color,
Blur = BASE_FUNCS.Blur,
Rotation = BASE_FUNCS.Rotation,
StartAngle = BASE_FUNCS.StartAngle,
EndAngle = BASE_FUNCS.EndAngle,
Clip = BASE_FUNCS.Clip,
Shadow = BASE_FUNCS.Shadow,
Flags = BASE_FUNCS.Flags,
Draw = RECT.Draw,
GetMaterial = RECT.GetMaterial
}
local L_STRENGTH, L_SPEED, L_SAT = 0.012, 1.0, 1.06
local L_TINTR, L_TINTG, L_TINTB, L_TINTS = 1.0, 1.0, 1.0, 0.06
local L_SHIM, L_GRAIN, L_ALPHA = 0.9, 0.02, 0.95
local L_BLURALL, L_BLURRAD, L_SMOOTHK = 0.0, 0.0, 2.0
local LRECT = {
Rad = BASE_FUNCS.Rad,
Radii = BASE_FUNCS.Radii,
Outline = BASE_FUNCS.Outline,
Rotation = BASE_FUNCS.Rotation,
StartAngle = BASE_FUNCS.StartAngle,
EndAngle = BASE_FUNCS.EndAngle,
Clip = BASE_FUNCS.Clip,
Shadow = BASE_FUNCS.Shadow,
Flags = BASE_FUNCS.Flags,
Color = BASE_FUNCS.Color,
Strength = function(self, v)
L_STRENGTH = math_max(v or 0, 0)
return self
end,
Speed = function(self, v)
L_SPEED = v or 1.0
return self
end,
Saturation = function(self, v)
L_SAT = v or 1.0
return self
end,
Tint = function(self, r, g, b)
if IsColor and IsColor(r) then
L_TINTR, L_TINTG, L_TINTB = r.r / 255, r.g / 255, r.b / 255
else
L_TINTR, L_TINTG, L_TINTB =
(r or 255) / 255,
(g or 255) / 255,
(b or 255) / 255
end
return self
end,
TintStrength = function(self, v)
L_TINTS = math_max(v or 0, 0)
return self
end,
Shimmer = function(self, v)
L_SHIM = math_max(v or 0, 0)
return self
end,
Grain = function(self, v)
L_GRAIN = math_max(v or 0, 0)
return self
end,
Alpha = function(self, v)
L_ALPHA = math_max(v or 0, 0)
return self
end,
GlassBlur = function(self, strength, radius)
L_BLURALL = math_max(strength or 0, 0)
L_BLURRAD = math_max(radius or 0, 0)
return self
end,
EdgeSmooth = function(self, pixels)
L_SMOOTHK = math_max(pixels or 0, 0)
return self
end,
Draw = function(self)
if START_ANGLE == END_ANGLE then
return
end
local OLD
if SHADOW_ENABLED or CLIP_PANEL then
OLD = DisableClipping(true)
end
if CLIP_PANEL then
local sx, sy = CLIP_PANEL:LocalToScreen(0, 0)
local sw, sh = CLIP_PANEL:GetSize()
render.SetScissorRect(sx, sy, sx + sw, sy + sh, true)
end
MAT = LIQUID_MAT
MATERIAL_SetFloat(MAT, LIQ_TIME, RealTime() * L_SPEED)
MATERIAL_SetFloat(MAT, LIQ_STR, L_STRENGTH)
MATERIAL_SetFloat(MAT, LIQ_ALPHA, L_ALPHA)
MATERIAL_SetFloat(MAT, LIQ_SHIM, L_SHIM)
MATERIAL_SetFloat(MAT, LIQ_SAT, L_SAT)
MATERIAL_SetFloat(MAT, LIQ_TINTS, L_TINTS)
MATERIAL_SetFloat(MAT, LIQ_GRAIN, L_GRAIN)
MATERIAL_SetFloat(MAT, LIQ_TR, L_TINTR)
MATERIAL_SetFloat(MAT, LIQ_TG, L_TINTG)
MATERIAL_SetFloat(MAT, LIQ_TB, L_TINTB)
MATERIAL_SetFloat(MAT, LIQ_BLUR_ALL, L_BLURALL)
MATERIAL_SetFloat(MAT, LIQ_BLUR_RAD, L_BLURRAD)
MATERIAL_SetFloat(MAT, LIQ_SMOOTHK, L_SMOOTHK)
SetupDraw()
surface_DrawTexturedRectUV(X, Y, W, H, -0.015625, -0.015625, 1.015625, 1.015625)
if CLIP_PANEL then
render.SetScissorRect(0, 0, 0, 0, false)
end
if SHADOW_ENABLED or CLIP_PANEL then
DisableClipping(OLD)
end
end
}
local TYPES = {
Rect = function(x, y, w, h)
RESET_PARAMS()
MAT = ROUNDED_MAT
X, Y, W, H = x, y, w, h
return RECT
end,
Circle = function(x, y, r)
RESET_PARAMS()
MAT = ROUNDED_MAT
SHAPE = SHAPES[SHAPE_CIRCLE]
X, Y, W, H = x - r / 2, y - r / 2, r, r
r = r / 2
TL, TR, BL, BR = r, r, r, r
return CIRCLE
end,
Liquid = function(x, y, w, h)
RESET_PARAMS()
MAT = LIQUID_MAT
X, Y, W, H = x, y, w, h
return LRECT
end
}
setmetatable(RNDX, { __call = function() return TYPES end })
RNDX.NO_TL = NO_TL
RNDX.NO_TR = NO_TR
RNDX.NO_BL = NO_BL
RNDX.NO_BR = NO_BR
RNDX.SHAPE_CIRCLE = SHAPE_CIRCLE
RNDX.SHAPE_FIGMA = SHAPE_FIGMA
RNDX.SHAPE_IOS = SHAPE_IOS
RNDX.BLUR = BLUR
RNDX.MANUAL_COLOR = MANUAL_COLOR
function RNDX.SetFlag(flags, flag, bool)
flag = RNDX[flag] or flag
if tobool(bool) then
return bit.bor(flags, flag)
else
return bit.band(flags, bit.bnot(flag))
end
end
function RNDX.SetDefaultShape(shape)
DEFAULT_SHAPE = shape or SHAPE_FIGMA
DEFAULT_DRAW_FLAGS = DEFAULT_SHAPE
end
_G.gSims_RNDX = RNDX
return RNDX
-- libNyx and LiquidGlass shader by MaryBlackfild
-- JOIN DISCORD: https://discord.gg/rUEEz4mfXw