Files
wnsrc/lua/sam/menu/cl_init.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

265 lines
5.7 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if SAM_LOADED then return end
local vgui = vgui
local draw = draw
local sam = sam
local sui = sui
local TDLib = sui.TDLib
local config = sam.config
do
local funcs = {
["SAM.ComboBox"] = {
event = "OnSelect",
function(s, _, value)
config.set(s.config_key, value)
end
},
["SAM.TextEntry"] = {
event = "OnEnter",
function(s)
local v = s:GetText()
if s:GetNumeric() then
v = tonumber(v)
end
config.set(s.config_key, v)
end
},
["SAM.ToggleButton"] = {
event = "OnChange",
function(s, v)
config.set(s.config_key, v)
end
}
}
sam.SUI = sam.SUI or sui.new("SAM", true, {
SetConfig = function(s, key, default)
s.config_key = key
local i = config.hook({key}, function(value, old)
local v = config.get(key, default)
s:SetValue(v)
end)
local t = funcs[s:GetName()]
s[t.event] = t[1]
s:On("OnRemove", function()
config.remove_hook(i)
end)
end
})
end
local SUI = sam.SUI
local GetColor = SUI.GetColor
sam.menu = {}
local tabs = {}
function sam.menu.add_tab(icon, func, check, pos)
local tab = {
icon = icon,
func = func,
check = check,
pos = pos
}
for k, v in ipairs(tabs) do
if v.icon == icon then
tabs[k] = tab
return
end
end
table.insert(tabs, tab)
end
function sam.menu.remove_tab(name)
for k, v in ipairs(tabs) do
if v.name == name then
table.remove(tabs, k)
break
end
end
end
SAM_TAB_TITLE_FONT = SUI.CreateFont("TabTitle", "Roboto Bold", 22)
SAM_TAB_DESC_FONT = SUI.CreateFont("TabDesc", "Roboto Medium", 15)
local MENU_LOADING = SUI.CreateFont("MenuLoading", "Roboto", 30)
SUI.AddToTheme("Dark", {
frame = "#181818",
scroll_panel = "#181818",
menu_tabs_title = "#ffffff",
--=--
player_list_titles = "#f2f1ef",
player_list_names = "#eeeeee",
player_list_names_2 = "#ff6347",
player_list_data = "#e8e8e8",
player_list_rank = "#41b9ff",
player_list_console = "#00c853",
player_list_rank_text = "#2c3e50",
player_list_steamid = "#a4a4a4",
--=--
--=--
actions_button = Color(0, 0, 0, 0),
actions_button_hover = Color(200, 200, 200, 60),
actions_button_icon = "#aaaaaa",
actions_button_icon_hover = "#ffffff",
--=--
--=--
page_switch_bg = "#222222",
--=--
})
SUI.SetTheme("Dark")
function SUI.panels.Frame:Paint(w, h)
if GetColor("frame_blur") then
TDLib.BlurPanel(self)
end
draw.RoundedBox(8, 0, 0, w, h, GetColor("frame"))
end
function SUI.panels.Frame:HeaderPaint(w, h)
draw.RoundedBoxEx(8, 0, 0, w, h, GetColor("header"), true, true, false, false)
draw.RoundedBox(0, 0, h - 1, w, 1, GetColor("line"))
end
do
function sam.menu.add_loading_panel(parent)
local is_loading = false
local loading_panel = parent:Add("Panel")
loading_panel:SetVisible(false)
loading_panel:SetZPos(999999)
loading_panel:SetMouseInputEnabled(false)
function loading_panel:Paint(w, h)
draw.RoundedBox(3, 0, 0, w, h, Color(50, 50, 50, 200))
draw.SimpleText(string.rep(".", (CurTime() * 3) % 3), MENU_LOADING, w/2, h/2, Color(200, 200, 200, 200), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
parent:SUI_TDLib()
parent:On("PerformLayout", function(s, w, h)
loading_panel:SetSize(w, h)
end)
local first = true
local toggle_loading = function(bool)
if not IsValid(loading_panel) then return end
is_loading = bool or not is_loading
if is_loading and not first then
loading_panel:SetVisible(is_loading and true or false)
loading_panel:SetMouseInputEnabled(is_loading)
else
timer.Simple(0.2, function()
if not IsValid(loading_panel) then return end
loading_panel:SetVisible(is_loading and true or false)
loading_panel:SetMouseInputEnabled(is_loading)
end)
end
first = false
end
return toggle_loading, function()
return is_loading
end
end
end
local sam_menu
function sam.menu.open_menu()
if IsValid(sam_menu) then
return sam_menu:IsVisible() and sam_menu:Hide() or sam_menu:Show()
-- sam_menu:Remove()
end
sam_menu = vgui.Create("SAM.Frame")
sam_menu:Center()
sam_menu:MakePopup()
sam_menu:SetTitle("SAM")
sam_menu:AddAnimations(800, 600)
sam_menu.close.DoClick = function()
sam_menu:Hide()
end
local sheet = sam_menu:Add("SAM.ColumnSheet")
sheet:Dock(FILL)
sheet:InvalidateParent(true)
sheet:InvalidateLayout(true)
sheet.Paint = nil
local tab_scroller = sheet.tab_scroller
tab_scroller:DockMargin(0, 1, 0, 1)
function tab_scroller:Paint(w, h)
draw.RoundedBoxEx(8, 0, 0, w, h, GetColor("column_sheet_bar"), false, false, true, false)
end
local sheets = {}
for _, v in SortedPairsByMemberValue(tabs, "pos") do
sheets[v.icon] = sheet:AddSheet(v.icon, v.func)
end
tab_scroller = tab_scroller:GetCanvas()
sam_menu:On("Think", function()
for _, v in ipairs(tabs) do
local tab = sheets[v.icon]
if v.check and not v.check() then
if tab:IsVisible() then
tab:SetVisible(false)
if sheet:GetActiveTab() == tab then
sheet:SetActiveTab(sheet.tabs[1])
end
tab_scroller:InvalidateLayout()
end
elseif not tab:IsVisible() then
tab:SetVisible(true)
tab_scroller:InvalidateLayout()
end
end
end)
end
function sam.menu.get()
return sam_menu
end
hook.Add("GUIMouseReleased", "SAM.CloseMenu", function(mouse_code)
local panel = vgui.GetHoveredPanel()
if mouse_code == MOUSE_LEFT and panel == vgui.GetWorldPanel() and IsValid(sam_menu) and sam_menu:HasHierarchicalFocus() then
sam_menu:Hide()
end
end)
for _, f in ipairs(file.Find("sam/menu/tabs/*.lua", "LUA")) do
sam.load_file("sam/menu/tabs/" .. f, "sh")
end