if SERVER then AddCSLuaFile("menutest.lua") return end -- Menu created by William "JetBoom" Moodhe -- williammoodhe@gmail.com surface.CreateFont("fheader", {font = "arial", size = 26, weight = 1000, antialias = true}) surface.CreateFont("fbutton", {font = "arial", size = 22, weight = 500, antialias = true}) local Tools = { "Weld", "weld", "Easy Weld", "weld", "Remover", "remover" } local VIPTools = { "Color", "colour", "Material", "material", "Keep Upright", "keepupright", "Advanced Duplicator", "advdupe", "Duplicator", "duplicator", "Glow", "glow", "Nail", "nail" } local function CreateToolButtons(namecmds, parent) for i=1, #namecmds, 2 do local name = namecmds[i] local cmd = namecmds[i + 1] if name and cmd then local but = vgui.Create("FWhiteButton", parent) but:SetTall(32) but:SetText(name) but.DoClick = function() RunConsoleCommand("gmod_tool", cmd) end but:Dock(TOP) end end end local col1 = Color(21, 21, 21) local col2 = Color(255, 255, 255) local colAlt = Color(0, 178, 252) local padding = 16 local padding2 = padding / 2 local function NewDModelPanelPaint(self) local x, y = self:LocalToScreen( 0, 0 ) local w, h = self:GetSize() local sl, st, sr, sb = x, y, x + w, y + h local p = self while p:GetParent() do p = p:GetParent() local pl, pt = p:LocalToScreen( 0, 0 ) local pr, pb = pl + p:GetWide(), pt + p:GetTall() sl = sl < pl and pl or sl st = st < pt and pt or st sr = sr > pr and pr or sr sb = sb > pb and pb or sb end render.SetScissorRect( sl, st, sr, sb, true ) DModelPanel.Paint(self) render.SetScissorRect( 0, 0, 0, 0, false ) end local function NewDModelPanelLayoutEntity() end local window local function OpenMenu() if window and window:Valid() then window:SetVisible(true) window:MakePopup() return end -- thanks obama local CategoryModels = {} for propname, proptab in pairs(FLOOD.Props) do local propcategory = proptab.Category CategoryModels[propcategory] = CategoryModels[propcategory] or {} table.insert(CategoryModels[propcategory], proptab) end window = vgui.Create("FMenuPanel") window:SetSize(math.min(ScrW(), 640), math.min(ScrH(), 900)) local leftsection = vgui.Create("Panel", window) leftsection:SetWide(window:GetWide() * 0.35) leftsection:SetPaintBackgroundEnabled(false) leftsection:Dock(LEFT) leftsection:DockPadding(0, 0, 0, 0) leftsection:DockMargin(0, 0, padding, 0) local rightsection = vgui.Create("DScrollPanel", window) rightsection:SetPaintBackground(false) rightsection:Dock(FILL) rightsection:DockPadding(0, 0, 0, 0) rightsection:DockMargin(0, 0, 0, 0) local topleftsection = vgui.Create("FWhitePanel", leftsection) topleftsection:SetTall(window:GetTall() * 0.25) topleftsection:Dock(TOP) topleftsection:DockPadding(0, 0, 0, 0) topleftsection:DockMargin(0, 0, 0, padding) local toolsheader = vgui.Create("FHeaderPanel", topleftsection) toolsheader:SetText("Tools") toolsheader:Dock(TOP) local toolslist = vgui.Create("DScrollPanel", topleftsection) toolslist:SetTall(window:GetTall() * 0.25) toolslist:Dock(FILL) toolslist:DockMargin(0, 0, 0, 0) toolslist:DockPadding(0, 0, 0, 0) CreateToolButtons(Tools, toolslist) local bottomleftsection = vgui.Create("FWhitePanel", leftsection) bottomleftsection:Dock(FILL) bottomleftsection:DockPadding(0, 0, 0, 0) bottomleftsection:DockMargin(0, 0, 0, 0) local viptoolsheader = vgui.Create("FHeaderPanel", bottomleftsection) viptoolsheader:SetText("VIP Tools") viptoolsheader:Dock(TOP) local viptoolslist = vgui.Create("DScrollPanel", bottomleftsection) viptoolslist:Dock(FILL) viptoolslist:DockMargin(0, 0, 0, 0) viptoolslist:DockPadding(0, 0, 0, 0) CreateToolButtons(VIPTools, viptoolslist) for cat, models in pairs(CategoryModels) do local numrows = math.max(1, math.ceil(#models / 7)) local header = vgui.Create("FHeaderPanel", rightsection) header:SetText(cat) header:Dock(TOP) --[[local spawnlist = vgui.Create("DScrollPanel", rightsection) spawnlist:SetTall(52 * numrows + 8) spawnlist:Dock(TOP) spawnlist:DockMargin(0, 0, 0, padding) spawnlist:DockPadding(padding2, padding2, padding2, padding2)]] local grid = vgui.Create("DGrid", rightsection) grid:Dock(TOP) grid:SetCols(7) grid:SetColWide(52) grid:SetRowHeight(52) grid:SetTall(52 * numrows + 8) grid:DockPadding(0, 0, 0, 0) grid:DockMargin(3, 4, 0, 4) for __, proptab in pairs(models) do local mdl = proptab.Model local health = proptab.HP local price = proptab.Price local buoyancy = proptab.Buoyancy local holder = vgui.Create("FWhiteButton", grid) holder:SetSize(48, 48) holder:SetTooltip(mdl.."\nPrice: "..price.."\nHealth: "..health.."\nBuoyancy: "..buoyancy) holder.DoClick = function() RunConsoleCommand("gm_spawn", mdl) surface.PlaySound("buttons/lightswitch2.wav") end local mdlpanel = vgui.Create("DModelPanel", holder) mdlpanel:SetModel(mdl) mdlpanel:SetFOV(80) mdlpanel:SetMouseInputEnabled(false) mdlpanel:Dock(FILL) mdlpanel:DockPadding(0, 0, 0, 0) mdlpanel:DockMargin(0, 0, 0, 0) local PrevMins, PrevMaxs = mdlpanel.Entity:GetRenderBounds() mdlpanel:SetCamPos(PrevMins:Distance(PrevMaxs) * Vector(0.5, 0.5, 0.5)) mdlpanel:SetLookAt((PrevMaxs + PrevMins) / 2) mdlpanel.Paint = NewDModelPanelPaint mdlpanel.LayoutEntity = NewDModelPanelLayoutEntity grid:AddItem(holder) end end window:Center() window:MakePopup() end local function CloseMenu() if window and window:Valid() then window:SetVisible(false) return end end concommand.Add("+menu", OpenMenu) concommand.Add("-menu", CloseMenu) local PANEL = {} function PANEL:Init() self:SetTall(48) self:DockPadding(padding2, padding2, padding2, padding2) self:DockMargin(0, 0, 0, 0) self.Text = vgui.Create("DLabel", self) self.Text:SetFont("fheader") self.Text:SetTextColor(col1) self.Text:SetContentAlignment(5) self.Text:Dock(FILL) self.Text:DockMargin(0, 0, 0, 0) self:SetText("") end function PANEL:SetText(text) self.Text:SetText(text) end function PANEL:GetText() return self.Text:GetValue() end function PANEL:Paint() surface.SetDrawColor(colAlt) surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) end vgui.Register("FHeaderPanel", PANEL, "DPanel") local PANEL = {} function PANEL:Init() self:DockPadding(padding, padding, padding, padding) end function PANEL:Paint() surface.SetDrawColor(col1) surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) end vgui.Register("FMenuPanel", PANEL, "DPanel") local PANEL = {} function PANEL:Init() self:SetText("") self:SetTextColor(col1) self:SetFont("fbutton") end function PANEL:Paint() surface.SetDrawColor(self.Hovered and colAlt or col2) surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) end vgui.Register("FWhiteButton", PANEL, "DButton") local PANEL = {} function PANEL:Paint() surface.SetDrawColor(col2) surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) end vgui.Register("FWhitePanel", PANEL, "DPanel")