add sborka
This commit is contained in:
697
garrysmod/addons/shreports/lua/reports/lib_loungeui.lua
Normal file
697
garrysmod/addons/shreports/lua/reports/lib_loungeui.lua
Normal file
@@ -0,0 +1,697 @@
|
||||
|
||||
|
||||
local base_table = SH_REPORTS
|
||||
local font_prefix = "SH_REPORTS."
|
||||
|
||||
--
|
||||
local matClose = Material("shenesis/general/close.png", "noclamp smooth")
|
||||
|
||||
local function get_scale()
|
||||
local sc = math.Clamp(ScrH() / 1080, 0.75, 1)
|
||||
if (!th) then
|
||||
th = 48 * sc
|
||||
m = th * 0.25
|
||||
end
|
||||
|
||||
return sc
|
||||
end
|
||||
|
||||
function base_table:L(s, ...)
|
||||
return string.format(self.Language[s] or s, ...)
|
||||
end
|
||||
|
||||
function base_table:GetPadding()
|
||||
return th
|
||||
end
|
||||
|
||||
function base_table:GetMargin()
|
||||
return m
|
||||
end
|
||||
|
||||
function base_table:GetScreenScale()
|
||||
return get_scale()
|
||||
end
|
||||
|
||||
function base_table:CreateFonts(scale)
|
||||
local font = self.Font
|
||||
local font_bold = self.FontBold
|
||||
|
||||
local sizes = {
|
||||
[12] = "Small",
|
||||
[16] = "Medium",
|
||||
[20] = "Large",
|
||||
[24] = "Larger",
|
||||
[32] = "Largest",
|
||||
[200] = "3D",
|
||||
}
|
||||
|
||||
for s, n in pairs (sizes) do
|
||||
surface.CreateFont(font_prefix .. n, {font = font, size = s * scale})
|
||||
surface.CreateFont(font_prefix .. n .. "B", {font = font_bold, size = s * scale})
|
||||
end
|
||||
end
|
||||
|
||||
hook.Add("InitPostEntity", font_prefix .. "CreateFonts", function()
|
||||
base_table:CreateFonts(get_scale())
|
||||
end)
|
||||
|
||||
function base_table:MakeWindow(title)
|
||||
local scale = get_scale()
|
||||
local styl = self.Style
|
||||
|
||||
local pnl = vgui.Create("EditablePanel")
|
||||
pnl.m_bDraggable = true
|
||||
pnl.SetDraggable = function(me, b)
|
||||
me.m_bDraggable = b
|
||||
end
|
||||
pnl.Paint = function(me, w, h)
|
||||
if (me.m_fCreateTime) then
|
||||
Derma_DrawBackgroundBlur(me, me.m_fCreateTime)
|
||||
end
|
||||
|
||||
draw.RoundedBox(4, 0, 0, w, h, styl.bg)
|
||||
end
|
||||
pnl.OnClose = function() end
|
||||
pnl.Close = function(me)
|
||||
if (me.m_bClosing) then
|
||||
return end
|
||||
|
||||
me.m_bClosing = true
|
||||
me:AlphaTo(0, 0.1, 0, function()
|
||||
me:Remove()
|
||||
end)
|
||||
me:OnClose()
|
||||
end
|
||||
|
||||
local header = vgui.Create("DPanel", pnl)
|
||||
header:SetTall(th)
|
||||
header:Dock(TOP)
|
||||
header.Paint = function(me, w, h)
|
||||
draw.RoundedBoxEx(4, 0, 0, w, h, styl.header, true, true, false, false)
|
||||
end
|
||||
header.Think = function(me)
|
||||
if (me.Hovered and pnl.m_bDraggable) then
|
||||
me:SetCursor("sizeall")
|
||||
end
|
||||
|
||||
local drag = me.m_Dragging
|
||||
if (drag) then
|
||||
local mx, my = math.Clamp(gui.MouseX(), 1, ScrW() - 1), math.Clamp(gui.MouseY(), 1, ScrH() - 1)
|
||||
local x, y = mx - drag[1], my - drag[2]
|
||||
|
||||
pnl:SetPos(x, y)
|
||||
end
|
||||
end
|
||||
header.OnMousePressed = function(me)
|
||||
if (pnl.m_bDraggable) then
|
||||
me.m_Dragging = {gui.MouseX() - pnl.x, gui.MouseY() - pnl.y}
|
||||
me:MouseCapture(true)
|
||||
end
|
||||
end
|
||||
header.OnMouseReleased = function(me)
|
||||
me.m_Dragging = nil
|
||||
me:MouseCapture(false)
|
||||
end
|
||||
pnl.m_Header = header
|
||||
|
||||
local titlelbl = self:QuickLabel(title, font_prefix .. "Larger", styl.text, header)
|
||||
titlelbl:Dock(LEFT)
|
||||
titlelbl:DockMargin(m, 0, 0, 0)
|
||||
pnl.m_Title = titlelbl
|
||||
|
||||
local close = vgui.Create("DButton", header)
|
||||
close:SetText("")
|
||||
close:SetWide(th)
|
||||
close:Dock(RIGHT)
|
||||
close.Paint = function(me, w, h)
|
||||
if (me.Hovered) then
|
||||
draw.RoundedBoxEx(4, 0, 0, w, h, styl.close_hover, false, true, false, false)
|
||||
end
|
||||
|
||||
if (me:IsDown()) then
|
||||
draw.RoundedBoxEx(4, 0, 0, w, h, styl.hover, false, true, false, false)
|
||||
end
|
||||
|
||||
surface.SetDrawColor(me:IsDown() and styl.text_down or styl.text)
|
||||
surface.SetMaterial(matClose)
|
||||
surface.DrawTexturedRectRotated(w * 0.5, h * 0.5, 16 * scale, 16 * scale, 0)
|
||||
end
|
||||
close.DoClick = function(me)
|
||||
pnl:Close()
|
||||
end
|
||||
pnl.m_Close = close
|
||||
|
||||
pnl.AddHeaderButton = function(me, icon, callback)
|
||||
local btn = vgui.Create("DButton", header)
|
||||
btn:SetText("")
|
||||
btn:SetWide(self:GetPadding())
|
||||
btn:Dock(RIGHT)
|
||||
btn.Paint = function(me, w, h)
|
||||
if (me.Hovered) then
|
||||
surface.SetDrawColor(styl.hover)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
surface.SetMaterial(icon)
|
||||
surface.SetDrawColor(styl.text)
|
||||
surface.DrawTexturedRect(w * 0.5 - 8, h * 0.5 - 8, 16, 16)
|
||||
end
|
||||
btn.DoClick = function()
|
||||
callback()
|
||||
end
|
||||
|
||||
return btn
|
||||
end
|
||||
|
||||
return pnl
|
||||
end
|
||||
|
||||
function base_table:QuickLabel(t, f, c, p)
|
||||
local l = vgui.Create("DLabel", p)
|
||||
l:SetText(t)
|
||||
l:SetFont(f:Replace("{prefix}", font_prefix))
|
||||
l:SetColor(c)
|
||||
l:SizeToContents()
|
||||
|
||||
return l
|
||||
end
|
||||
|
||||
function base_table:QuickButton(t, cb, p, f, c)
|
||||
p:SetMouseInputEnabled(true)
|
||||
|
||||
local styl = self.Style
|
||||
|
||||
local b = vgui.Create("DButton", p)
|
||||
b:SetText(t)
|
||||
b:SetFont((f or "{prefix}Medium"):Replace("{prefix}", font_prefix))
|
||||
b:SetColor(c or styl.text)
|
||||
b:SizeToContents()
|
||||
b.DoClick = function(me)
|
||||
cb(me)
|
||||
end
|
||||
b.Paint = function(me, w, h)
|
||||
local r = me.m_iRound or 4
|
||||
|
||||
draw.RoundedBox(r, 0, 0, w, h, me.m_Background or styl.inbg)
|
||||
|
||||
if (!me.m_bNoHover and me.Hovered) then
|
||||
draw.RoundedBox(r, 0, 0, w, h, styl.hover)
|
||||
end
|
||||
|
||||
if (me.IsDown and me:IsDown()) then
|
||||
draw.RoundedBox(r, 0, 0, w, h, styl.hover)
|
||||
end
|
||||
end
|
||||
|
||||
return b
|
||||
end
|
||||
|
||||
function base_table:ButtonStyle(b, f, c)
|
||||
local styl = self.Style
|
||||
|
||||
b:SetFont((f or "{prefix}Medium"):Replace("{prefix}", font_prefix))
|
||||
b:SetContentAlignment(5)
|
||||
b:SetColor(c or styl.text)
|
||||
b.Paint = function(me, w, h)
|
||||
local r = me.m_iRound or 4
|
||||
|
||||
draw.RoundedBox(r, 0, 0, w, h, me.m_Background or styl.inbg)
|
||||
|
||||
if (!me.m_bNoHover and me.Hovered) then
|
||||
draw.RoundedBox(r, 0, 0, w, h, styl.hover)
|
||||
end
|
||||
|
||||
if (me.IsDown and me:IsDown()) then
|
||||
draw.RoundedBox(r, 0, 0, w, h, styl.hover)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function base_table:LineStyle(l)
|
||||
local styl = self.Style
|
||||
|
||||
for _, v in pairs (l.Columns) do
|
||||
if (v.SetFont) then
|
||||
v:SetContentAlignment(5)
|
||||
v:SetFont(font_prefix .. "Medium")
|
||||
v:SetTextColor(styl.text)
|
||||
end
|
||||
end
|
||||
|
||||
l.Paint = function(me, w, h)
|
||||
if (!me:GetAltLine()) then
|
||||
surface.SetAlphaMultiplier(math.min(me:GetAlpha() / 255, 0.5))
|
||||
surface.SetDrawColor(styl.inbg)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
surface.SetAlphaMultiplier(me:GetAlpha() / 255)
|
||||
end
|
||||
|
||||
if (me:IsSelectable() and me:IsLineSelected()) then
|
||||
surface.SetDrawColor(styl.hover)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
elseif (me.Hovered or me:IsChildHovered()) then
|
||||
surface.SetDrawColor(styl.hover2)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function base_table:QuickEntry(tx, parent)
|
||||
parent:SetMouseInputEnabled(true)
|
||||
parent:SetKeyboardInputEnabled(true)
|
||||
|
||||
local styl = self.Style
|
||||
|
||||
local entry = vgui.Create("DTextEntry", parent)
|
||||
entry:SetText(tx or "")
|
||||
entry:SetFont(font_prefix .. "Medium")
|
||||
entry:SetDrawLanguageID(false)
|
||||
entry:SetUpdateOnType(true)
|
||||
entry:SetTextColor(styl.text)
|
||||
entry:SetHighlightColor(styl.header)
|
||||
entry:SetCursorColor(styl.text)
|
||||
entry.Paint = function(me, w, h)
|
||||
draw.RoundedBox(4, 0, 0, w, h, styl.textentry)
|
||||
me:DrawTextEntryText(me:GetTextColor(), me:GetHighlightColor(), me:GetCursorColor())
|
||||
end
|
||||
|
||||
return entry
|
||||
end
|
||||
|
||||
function base_table:QuickComboBox(parent)
|
||||
parent:SetMouseInputEnabled(true)
|
||||
|
||||
local combo = vgui.Create("DComboBox", parent)
|
||||
combo.m_bNoHover = true
|
||||
self:ButtonStyle(combo)
|
||||
|
||||
combo.OldDoClick = combo.DoClick
|
||||
combo.DoClick = function(me)
|
||||
me:OldDoClick()
|
||||
|
||||
if (IsValid(me.Menu)) then
|
||||
for _, v in pairs (me.Menu:GetChildren()[1]:GetChildren()) do -- sdfdsfzz
|
||||
self:ButtonStyle(v)
|
||||
v.m_iRound = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return combo
|
||||
end
|
||||
|
||||
function base_table:PaintScroll(panel)
|
||||
local styl = self.Style
|
||||
|
||||
local scr = panel.VBar or panel:GetVBar()
|
||||
scr.Paint = function(_, w, h)
|
||||
draw.RoundedBox(4, 0, 0, w, h, /* 76561198398853149 styl.header */ styl.bg)
|
||||
end
|
||||
|
||||
scr.btnUp.Paint = function(_, w, h)
|
||||
draw.RoundedBox(4, 2, 0, w - 4, h - 2, styl.inbg)
|
||||
end
|
||||
scr.btnDown.Paint = function(_, w, h)
|
||||
draw.RoundedBox(4, 2, 2, w - 4, h - 2, styl.inbg)
|
||||
end
|
||||
|
||||
scr.btnGrip.Paint = function(me, w, h)
|
||||
draw.RoundedBox(4, 2, 0, w - 4, h, styl.inbg)
|
||||
|
||||
if (me.Hovered) then
|
||||
draw.RoundedBox(4, 2, 0, w - 4, h, styl.hover2)
|
||||
end
|
||||
|
||||
if (me.Depressed) then
|
||||
draw.RoundedBox(4, 2, 0, w - 4, h, styl.hover2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function base_table:PaintList(ilist)
|
||||
for _, v in pairs (ilist.Columns) do
|
||||
self:ButtonStyle(v.Header)
|
||||
v.DraggerBar:SetVisible(false)
|
||||
end
|
||||
|
||||
self:PaintScroll(ilist)
|
||||
end
|
||||
|
||||
function base_table:StringRequest(title, text, callback)
|
||||
local styl = self.Style
|
||||
|
||||
if (IsValid(_LOUNGE_STRREQ)) then
|
||||
_LOUNGE_STRREQ:Remove()
|
||||
end
|
||||
|
||||
local scale = get_scale()
|
||||
local wi, he = 600 * scale, 160 * scale
|
||||
|
||||
local cancel = vgui.Create("DPanel")
|
||||
cancel:SetDrawBackground(false)
|
||||
cancel:StretchToParent(0, 0, 0, 0)
|
||||
cancel:MoveToFront()
|
||||
cancel:MakePopup()
|
||||
|
||||
local pnl = self:MakeWindow(title)
|
||||
pnl:SetSize(wi, he)
|
||||
pnl:Center()
|
||||
pnl:MakePopup()
|
||||
pnl.m_fCreateTime = SysTime()
|
||||
_LOUNGE_STRREQ = pnl
|
||||
|
||||
cancel.OnMouseReleased = function(me, mc)
|
||||
if (mc == MOUSE_LEFT) then
|
||||
pnl:Close()
|
||||
end
|
||||
end
|
||||
cancel.Think = function(me)
|
||||
if (!IsValid(pnl)) then
|
||||
me:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
local body = vgui.Create("DPanel", pnl)
|
||||
body:SetDrawBackground(false)
|
||||
body:Dock(FILL)
|
||||
body:DockPadding(m, m, m, m)
|
||||
|
||||
local tx = self:QuickLabel(text, font_prefix .. "Large", styl.text, body)
|
||||
tx:SetContentAlignment(5)
|
||||
tx:SetWrap(tx:GetWide() > wi - m * 2)
|
||||
tx:Dock(FILL)
|
||||
|
||||
local apply = vgui.Create("DButton", body)
|
||||
apply:SetText("OK")
|
||||
apply:SetColor(styl.text)
|
||||
apply:SetFont(font_prefix .. "Medium")
|
||||
apply:Dock(BOTTOM)
|
||||
apply.Paint = function(me, w, h)
|
||||
draw.RoundedBox(4, 0, 0, w, h, styl.inbg)
|
||||
|
||||
if (me.Hovered) then
|
||||
draw.RoundedBox(4, 0, 0, w, h, styl.hover)
|
||||
end
|
||||
|
||||
if (me:IsDown()) then
|
||||
draw.RoundedBox(4, 0, 0, w, h, styl.hover)
|
||||
end
|
||||
end
|
||||
|
||||
local entry = vgui.Create("DTextEntry", body)
|
||||
entry:RequestFocus()
|
||||
entry:SetFont(font_prefix .. "Medium")
|
||||
entry:SetDrawLanguageID(false)
|
||||
entry:Dock(BOTTOM)
|
||||
entry:DockMargin(0, m, 0, m)
|
||||
entry.Paint = function(me, w, h)
|
||||
draw.RoundedBox(4, 0, 0, w, h, styl.textentry)
|
||||
me:DrawTextEntryText(me:GetTextColor(), me:GetHighlightColor(), me:GetCursorColor())
|
||||
end
|
||||
entry.OnEnter = function()
|
||||
apply:DoClick()
|
||||
end
|
||||
|
||||
apply.DoClick = function()
|
||||
pnl:Close()
|
||||
callback(entry:GetValue())
|
||||
end
|
||||
|
||||
pnl.OnFocusChanged = function(me, gained)
|
||||
if (!gained) then
|
||||
timer.Simple(0, function()
|
||||
if (!IsValid(me) or vgui.GetKeyboardFocus() == entry) then
|
||||
return end
|
||||
|
||||
me:Close()
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
pnl:SetWide(math.max(math.min(tx:GetWide() + m * 2, pnl:GetWide()), th * 2))
|
||||
pnl:CenterHorizontal()
|
||||
|
||||
pnl:SetAlpha(0)
|
||||
pnl:AlphaTo(255, 0.1)
|
||||
end
|
||||
|
||||
function base_table:Menu()
|
||||
local styl = self.Style
|
||||
|
||||
if (IsValid(_LOUNGE_MENU)) then
|
||||
_LOUNGE_MENU:Remove()
|
||||
end
|
||||
|
||||
local cancel = vgui.Create("DPanel")
|
||||
cancel:SetDrawBackground(false)
|
||||
cancel:StretchToParent(0, 0, 0, 0)
|
||||
cancel:MoveToFront()
|
||||
cancel:MakePopup()
|
||||
|
||||
local pnl = vgui.Create("DPanel")
|
||||
pnl:SetDrawBackground(false)
|
||||
pnl:SetSize(20, 1)
|
||||
pnl.AddOption = function(me, text, callback)
|
||||
surface.SetFont(font_prefix .. "MediumB")
|
||||
local wi, he = surface.GetTextSize(text)
|
||||
wi = wi + m * 2
|
||||
he = he + m
|
||||
|
||||
me:SetWide(math.max(wi, me:GetWide()))
|
||||
me:SetTall(pnl:GetTall() + he)
|
||||
|
||||
local btn = vgui.Create("DButton", me)
|
||||
btn:SetText(self:L(text))
|
||||
btn:SetFont(font_prefix .. "MediumB")
|
||||
btn:SetColor(styl.text)
|
||||
btn:Dock(TOP)
|
||||
btn:SetSize(wi, he)
|
||||
btn.Paint = function(me, w, h)
|
||||
surface.SetDrawColor(styl.menu)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
if (me.Hovered) then
|
||||
surface.SetDrawColor(styl.hover)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
if (me:IsDown()) then
|
||||
surface.SetDrawColor(styl.hover)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
end
|
||||
btn.DoClick = function(me)
|
||||
if (callback) then
|
||||
callback()
|
||||
end
|
||||
pnl:Close()
|
||||
end
|
||||
|
||||
return btn
|
||||
end
|
||||
pnl.Open = function(me)
|
||||
me:SetPos(gui.MouseX(), math.min(math.max(0, ScrH() - me:GetTall()), gui.MouseY()))
|
||||
me:MakePopup()
|
||||
end
|
||||
pnl.Close = function(me)
|
||||
if (me.m_bClosing) then
|
||||
return end
|
||||
|
||||
me.m_bClosing = true
|
||||
me:AlphaTo(0, 0.1, 0, function()
|
||||
me:Remove()
|
||||
end)
|
||||
end
|
||||
_LOUNGE_MENU = pnl
|
||||
|
||||
cancel.OnMouseReleased = function(me, mc)
|
||||
pnl:Close()
|
||||
end
|
||||
cancel.Think = function(me)
|
||||
if (!IsValid(pnl)) then
|
||||
me:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
return pnl
|
||||
end
|
||||
|
||||
function base_table:PanelPaint(name)
|
||||
local styl = self.Style
|
||||
local col = styl[name] or styl.bg
|
||||
|
||||
return function(me, w, h)
|
||||
draw.RoundedBox(4, 0, 0, w, h, col)
|
||||
end
|
||||
end
|
||||
|
||||
// https://facepunch.com/showthread.php?t=1522945&p=50524545&viewfull=1#post50524545|76561198398853124
|
||||
local sin, cos, rad = math.sin, math.cos, math.rad
|
||||
local rad0 = rad(0)
|
||||
local function DrawCircle(x, y, radius, seg)
|
||||
local cir = {
|
||||
{x = x, y = y}
|
||||
}
|
||||
|
||||
for i = 0, seg do
|
||||
local a = rad((i / seg) * -360)
|
||||
table.insert(cir, {x = x + sin(a) * radius, y = y + cos(a) * radius})
|
||||
end
|
||||
|
||||
table.insert(cir, {x = x + sin(rad0) * radius, y = y + cos(rad0) * radius})
|
||||
surface.DrawPoly(cir)
|
||||
end
|
||||
|
||||
function base_table:Avatar(ply, siz, par)
|
||||
if (type(ply) == "Entity" and !IsValid(ply)) then
|
||||
return end
|
||||
|
||||
if (isnumber(ply)) then
|
||||
ply = tostring(ply)
|
||||
end
|
||||
|
||||
siz = siz or 32
|
||||
local hsiz = siz * 0.5
|
||||
|
||||
local url = "http://steamcommunity.com/profiles/" .. (isstring(ply) and ply or ply:SteamID64() or "")
|
||||
|
||||
par:SetMouseInputEnabled(true)
|
||||
|
||||
local pnl = vgui.Create("DPanel", par)
|
||||
pnl:SetSize(siz, siz)
|
||||
pnl:SetDrawBackground(false)
|
||||
pnl.Paint = function() end
|
||||
|
||||
local av = vgui.Create("AvatarImage", pnl)
|
||||
if (isstring(ply)) then
|
||||
av:SetSteamID(ply, siz)
|
||||
else
|
||||
av:SetPlayer(ply, siz)
|
||||
end
|
||||
av:SetPaintedManually(true)
|
||||
av:SetSize(siz, siz)
|
||||
|
||||
local btn = vgui.Create("DButton", av)
|
||||
btn:SetToolTip("Click here to view " .. (isstring(ply) and "their" or ply:Nick() .. "'s") .. " Steam Profile")
|
||||
btn:SetText("")
|
||||
btn:Dock(FILL)
|
||||
btn.Paint = function() end
|
||||
btn.DoClick = function(me)
|
||||
gui.OpenURL(url)
|
||||
end
|
||||
|
||||
pnl.SetSteamID = function(me, s)
|
||||
av:SetSteamID(s, siz)
|
||||
url = "http://steamcommunity.com/profiles/" .. s
|
||||
end
|
||||
pnl.SetPlayer = function(me, p)
|
||||
av:SetPlayer(p, siz)
|
||||
url = "http://steamcommunity.com/profiles/" .. p:SteamID64()
|
||||
end
|
||||
pnl.Paint = function(me, w, h)
|
||||
render.ClearStencil()
|
||||
render.SetStencilEnable(true)
|
||||
|
||||
render.SetStencilWriteMask(1)
|
||||
render.SetStencilTestMask(1)
|
||||
|
||||
render.SetStencilFailOperation(STENCILOPERATION_REPLACE)
|
||||
render.SetStencilPassOperation(STENCILOPERATION_ZERO)
|
||||
render.SetStencilZFailOperation(STENCILOPERATION_ZERO)
|
||||
render.SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_NEVER)
|
||||
render.SetStencilReferenceValue(1)
|
||||
|
||||
draw.NoTexture()
|
||||
surface.SetDrawColor(color_black)
|
||||
DrawCircle(hsiz, hsiz, hsiz, hsiz)
|
||||
|
||||
render.SetStencilFailOperation(STENCILOPERATION_ZERO)
|
||||
render.SetStencilPassOperation(STENCILOPERATION_REPLACE)
|
||||
render.SetStencilZFailOperation(STENCILOPERATION_ZERO)
|
||||
render.SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_EQUAL)
|
||||
render.SetStencilReferenceValue(1)
|
||||
|
||||
av:PaintManual()
|
||||
|
||||
render.SetStencilEnable(false)
|
||||
render.ClearStencil()
|
||||
end
|
||||
|
||||
return pnl
|
||||
end
|
||||
|
||||
local c = {}
|
||||
function base_table:GetName(sid, cb)
|
||||
if (c[sid]) then
|
||||
cb(c[sid])
|
||||
return
|
||||
end
|
||||
|
||||
for _, v in pairs (player.GetAll()) do
|
||||
if (v:SteamID64() == sid) then
|
||||
c[sid] = v:Nick()
|
||||
cb(v:Nick())
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
steamworks.RequestPlayerInfo(sid)
|
||||
timer.Simple(1, function()
|
||||
local n = steamworks.GetPlayerName(sid)
|
||||
c[sid] = n
|
||||
cb(n)
|
||||
end)
|
||||
end
|
||||
|
||||
function base_table:Notify(msg, dur, bg, parent)
|
||||
if (IsValid(_SH_NOTIFY)) then
|
||||
_SH_NOTIFY:Close()
|
||||
end
|
||||
|
||||
dur = dur or 3
|
||||
bg = bg or self.Style.header
|
||||
|
||||
local fnt = font_prefix .. "Larger"
|
||||
|
||||
local w, h = ScrW(), ScrH()
|
||||
if (IsValid(parent)) then
|
||||
w, h = parent:GetSize()
|
||||
fnt = font_prefix .. "Large"
|
||||
end
|
||||
|
||||
local p = vgui.Create("DButton", parent)
|
||||
p:MoveToFront()
|
||||
p:SetText(self.Language[msg] or msg)
|
||||
p:SetFont(fnt)
|
||||
p:SetColor(self.Style.text)
|
||||
p:SetSize(w, draw.GetFontHeight(fnt) + self:GetMargin() * 2)
|
||||
p:AlignTop(h)
|
||||
p.Paint = function(me, w, h)
|
||||
surface.SetDrawColor(bg)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
p.Close = function(me)
|
||||
if (me.m_bClosing) then
|
||||
return end
|
||||
|
||||
me.m_bClosing = true
|
||||
me:Stop()
|
||||
me:MoveTo(0, h, 0.2, 0, -1, function()
|
||||
me:Remove()
|
||||
end)
|
||||
end
|
||||
p.DoClick = p.Close
|
||||
_SH_NOTIFY = p
|
||||
|
||||
p:MoveTo(0, h - p:GetTall(), 0.2, 0, -1, function()
|
||||
p:MoveTo(0, h, 0.2, dur, -1, function()
|
||||
p:Remove()
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
function base_table:LerpColor(frac, from, to)
|
||||
return Color(Lerp(frac, from.r, to.r), Lerp(frac, from.g, to.g), Lerp(frac, from.b, to.b), Lerp(frac, from.a, to.a))
|
||||
end
|
||||
|
||||
-- vk.com/urbanichka
|
||||
Reference in New Issue
Block a user