mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
265 lines
5.7 KiB
Lua
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 |