diff options
Diffstat (limited to 'gamemode/client')
| -rw-r--r-- | gamemode/client/cl_inventory.lua | 608 |
1 files changed, 423 insertions, 185 deletions
diff --git a/gamemode/client/cl_inventory.lua b/gamemode/client/cl_inventory.lua index 80af83f..762baae 100644 --- a/gamemode/client/cl_inventory.lua +++ b/gamemode/client/cl_inventory.lua @@ -1,12 +1,128 @@ -print("Custom inventory loaded") +print("Custom Inventory Loaded") ---Some calculations to draw the inventory nicely -local scrx = ScrW() -local scry = ScrH() ---Make the menu 30% of the x to the closest 64 and 100% of the y -local invxadj = ((scrx*0.4)%64) -local invxsize = (scrx*0.40)-invxadj-38 --no idea why the 38 works, but it does -local invysize = scry +local invxsize = 800 +local invysize = 500 +local bPanelWidth = invxsize * 0.25 +local bPanelHeight = invysize * 0.8 +local dPanelWidth = 540 +local dPanelHeight = 400 + +local curDisplay = nil + +local buttons = { + + + { + + txt = "Inventory", + admin = false, + + }, + { + + txt = "Structures", + admin = false, + + }, + { + + txt = "Combinations", + admin = false, + + }, + { + + txt = "Equipment", + admin = false, + + }, + { + + txt = "Props", + admin = false, + + }, + { + + txt = "Tools", + admin = false, + + }, + { + + txt = "Admin", + admin = true, + + }, + + +} + +surface.CreateFont( "gmNameFont", { + font = "Century", -- Use the font-name which is shown to you by your operating system Font Viewer, not the file name + size = 21, + weight = 500, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, +} ) + +surface.CreateFont( "ButtonText", { + font = "Century", -- Use the font-name which is shown to you by your operating system Font Viewer, not the file name + size = 25, + weight = 500, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, +} ) + +surface.CreateFont( "StructureText", { + font = "Century", -- Use the font-name which is shown to you by your operating system Font Viewer, not the file name + size = 14, + weight = 800, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, +} ) + +local function createTooltipTextFor(tbl) + local string = "" + for k,v in pairs(tbl) do + string = string .. (k .. " x" .. v .. "\n") + end + return string +end + +local function createPanel() + + local frame = vgui.Create( "InventoryFrame" ) + + return frame +end local function createMenuFor(menu, tbl) print("Createing actions for:") @@ -21,202 +137,324 @@ local function createMenuFor(menu, tbl) end end -local function createTooltipTextFor(tbl) - local string = "" - for k,v in pairs(tbl) do - string = string .. (k .. " x" .. v .. "\n") - end - return string +// Frame + +local PANEL = {} + +function PANEL:Init() + + self:SetSize( invxsize, invysize ) + self:SetTitle( "Inventory" ) + self:MakePopup() + self:Center() + self:SetKeyboardInputEnabled(true) + self:ShowCloseButton(false) + self.OnKeyCodePressed = function(self,key) + if(key == KEY_Q)then + self:Close() + end + end + + local buttonPanel = vgui.Create("DPanel", self) + buttonPanel:SetSize( bPanelWidth, bPanelHeight ) + buttonPanel:SetPos( 10, self:GetTall() * 0.1 ) + buttonPanel.Paint = function() + draw.RoundedBox(12,0,0,buttonPanel:GetWide(),buttonPanel:GetTall(),Color(0, 0, 0, 255)) + end + + local displayPanel = vgui.Create("DPanel", self) + displayPanel:SetSize( dPanelWidth, dPanelHeight ) + displayPanel:SetPos( buttonPanel:GetWide() + 30, self:GetTall() * 0.1 ) + if (curDisplay != nil) then + dis = vgui.Create(curDisplay,displayPanel) + dis:SetSize(dPanelWidth,dPanelHeight) + else + dis = vgui.Create(buttons[1]['txt'], displayPanel) + dis:SetSize(dPanelWidth,dPanelHeight) + end + displayPanel.Paint = function() + + draw.RoundedBox( 0, 0, 0, displayPanel:GetWide(), displayPanel:GetTall(), Color( 255, 255, 255 ) ) + end + + titlePanelWidth = 50 + + local titlePanel = vgui.Create("DPanel", buttonPanel) + titlePanel:SetSize(buttonPanel:GetWide(),titlePanelWidth) + titlePanel:SetPos( 0,0 ) + titlePanel.Paint = function() + draw.RoundedBox( 0, 0, 0, titlePanel:GetWide(), titlePanel:GetTall(), Color( 153, 0, 0) ) + surface.SetFont( "gmNameFont" ) + surface.SetTextColor( 0,0,0 ) + surface.SetTextPos( (titlePanel:GetWide()/2) - ( surface.GetTextSize(gmod.GetGamemode().Name)/2 ), (titlePanel:GetTall()/2) - (select( 2, surface.GetTextSize( gmod.GetGamemode().Name ) )/2) ) + surface.DrawText( gmod.GetGamemode().Name ) + end + + for k,v in pairs(buttons) do + + if (v['admin'] and !LocalPlayer():IsAdmin()) then break end + + local btn = vgui.Create("DButton", buttonPanel) + btn:SetText("") + btn:SetSize( buttonPanel:GetWide(), 44 ) + btn:SetPos( 0, (k-1)*btn:GetTall() + ((k-1)*1) + (titlePanelWidth+10) ) + btn.Paint = function() + draw.RoundedBox( 0, 0, 0, btn:GetWide(), btn:GetTall(), Color( 0, 0, 102 ) ) + surface.SetFont( "ButtonText" ) + surface.SetTextColor( 255,255,255 ) + surface.SetTextPos( (btn:GetWide()/2) - ( surface.GetTextSize(v['txt'])/2 ), (btn:GetTall()/2) - (select( 2, surface.GetTextSize( v['txt'] ) )/2) ) + surface.DrawText( v['txt'] ) + end + btn.DoClick = function() + + displayPanel:Clear() + local d = vgui.Create( v['txt'], displayPanel ) + d:SetSize( dPanelWidth, dPanelHeight ) + curDisplay = v['txt'] + + end + + end + + + end -local function createPanel() - local frame = vgui.Create( "DFrame" ) - frame:SetSize( invxsize, invysize ) - frame:SetTitle( "Inventory" ) - frame:MakePopup() - frame:SetPos(scrx-invxsize,0) - frame:SetKeyboardInputEnabled(true) - frame:ShowCloseButton(false) - frame.OnKeyCodePressed = function(self, key) - if(key == KEY_Q) then - frame:Close() - end - end +function PANEL:Paint() + draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color( 0, 0, 0, 250 ) ) +end - local tabsheet = vgui.Create("DPropertySheet", frame) - tabsheet:Dock(FILL) - - local invtab = vgui.Create("DPanel",tabsheet) - tabsheet:AddSheet( "Inventory", invtab, "icon16/database.png" ) - local structtab = vgui.Create("DPanel",tabsheet) - tabsheet:AddSheet( "Structures", structtab, "icon16/bullet_blue.png") - local combitab = vgui.Create("DPanel",tabsheet) - tabsheet:AddSheet( "Combinations", combitab, "icon16/bullet_picture.png") - local equiptab = vgui.Create("DPanel",tabsheet) - tabsheet:AddSheet( "Equipment", equiptab, "icon16/user.png" ) - local proptab = vgui.Create("DPanel",tabsheet) - tabsheet:AddSheet( "Props", proptab, "icon16/wrench.png" ) - local tooltab = vgui.Create("DPanel", tabsheet) - tabsheet:AddSheet( "Tools", tooltab, "icon16/bullet_red.png") - if(LocalPlayer():IsAdmin()) then - local admintab = vgui.Create("DPanel",tabsheet) - tabsheet:AddSheet("Admin", admintab, "icon16/bullet_star.png") - end +vgui.Register( "InventoryFrame", PANEL, "DFrame" ) - --Inventory - local layout = vgui.Create( "DTileLayout", invtab ) - layout:SetBaseSize( 64 ) -- Tile size - layout:Dock( FILL ) +// Inventory - layout:MakeDroppable( "unique_name" ) -- Allows us to rearrange children - for k, v in SortedPairs( Resources ) do - if(v == 0) then - continue - end - local selection = vgui.Create("DImageButton") - if(GMS.Resources[k] == nil) then --This resource is not registered! - selection:SetImage("vgui/avatar_default") - print("Resource:" .. k .. " not registed! This might be a bug!") - continue - elseif(GMS.Resources[k].Icon == nil) then - selection:SetImage("vgui/avatar_default") - print("Resource:" .. k .. " does not have an .Icon field! This might be a bug!") - continue - else - selection:SetImage(GMS.Resources[k].Icon) - selection:SetTooltip(GMS.Resources[k].Description) - end +local PANEL = {} - selection:SetSize(64,64) - selection.DoClick = function() - if(GMS.Resources[k].UniqueData) then - print("We should expand menu to show all uniqueid's") - else - if(GMS.Resources[k].Actions == nil) then - print("gamemode/client/cl_inventory.lua: Looking for actions for " .. k .. " but found nil!") - return - end - local menu = vgui.Create("DMenu") - --print("makeing menu for " .. k) - PrintTable(GMS.Resources[k]) - createMenuFor(menu,GMS.Resources[k].Actions) - menu:Open() - end - end - layout:Add( selection ) - end +function PANEL:Init() + + local dpnl = vgui.Create( "DScrollPanel", self ) + dpnl:SetSize( dPanelWidth, dPanelHeight ) + dpnl:SetPos( 0, 0 ) - --Structure building - local layout = vgui.Create( "DTileLayout", structtab) - layout:SetBaseSize( 64 ) -- Tile size - layout:Dock( FILL ) - layout:MakeDroppable( "unique_name" ) -- Allows us to rearrange children - for k,v in pairs(GMS.Combinations["Structures"]) do - --print("Createing panel for " .. v.BuildSiteModel) - local modelPanel = vgui.Create( "DModelPanel", layout ) - --modelPanel:SetPos( 0, 0 ) - modelPanel:SetSize( 64, 64 ) - modelPanel:SetModel( v.BuildSiteModel ) - modelPanel:SetCamPos( Vector( 50,50,50 ) ) - modelPanel:SetLookAt( Vector( 0, 0, -40 ) ) - modelPanel.DoClick = function() - --print("I want to construct a " .. k) - LocalPlayer():ConCommand("gms_MakeCombination Structures " .. k ) - end - layout:Add(modelPanel) - end - --Combinations in the combinations button - local layout = vgui.Create( "DTileLayout", combitab) - layout:SetBaseSize( 64 ) -- Tile size - layout:Dock( FILL ) - layout:MakeDroppable( "unique_name" ) -- Allows us to rearrange children - for k,v in pairs(GMS.Combinations["Combinations"]) do - --PrintTable(v) - local combipanel = vgui.Create("DButton", layout) - combipanel:SetSize(64,64) - combipanel:SetText(v.Name) - combipanel:SetTooltip(createTooltipTextFor(v.Req)) - combipanel.DoClick = function() - --print("I want to combine a " .. v.Name) - LocalPlayer():ConCommand("gms_MakeCombination Combinations " .. v.Name) - end - layout:Add(combipanel) - end + local col = 0 + local row = 0 + i = 0 + for k,v in SortedPairs(Resources) do + + print(k) + print(v) + + if (v == 0) then continue end + + local slot = vgui.Create("DButton", dpnl) + slot:SetSize(dPanelWidth/5, 100) + slot:SetText(v) + + + slot.DoClick = function() + + local menu = vgui.Create("DMenu") + --print("makeing menu for " .. k) + PrintTable(GMS.Resources[k]) + createMenuFor(menu,GMS.Resources[k].Actions) + menu:Open() + + end + + + if (i % 5 != 0 ) then + slot:SetPos(row*dPanelWidth/5, (col-1)*100) + row=row+1 + else + row=0 + col=col+1 + slot:SetPos(row*dPanelWidth/5, (col-1)*100) + row=row+1 + end + + i=i+1 + + end + +end - --Make the prop spawn menu - local layout = vgui.Create( "DListLayout", proptab) - layout:Dock( FILL ) - local labelnum = 0 - for k,v in pairs(GMS_SpawnLists) do - local DCollapsible = vgui.Create( "DCollapsibleCategory" ) - DCollapsible:SetLabel(k) - DCollapsible:SetSize(frame:GetWide(),200) - DCollapsible:SetPadding(5) - --DCollapsible:SetPos(0,labelnum) - DCollapsible:SetExpanded( 0 ) - layout:Add(DCollapsible) - labelnum = labelnum + 20 - local propgrid = vgui.Create("DTileLayout", DCollapsible) - propgrid:SetBaseSize( 64 ) -- Tile size - propgrid:Dock( FILL ) - propgrid:MakeDroppable( "unique_name" ) -- Allows us to rearrange children - DCollapsible:SetContents(propgrid) - for i,j in pairs(v) do - local itm = vgui.Create("DModelPanel", propgrid) - itm:SetModel(j) - itm:SetSize( 64, 64 ) - itm.DoClick = function() - RunConsoleCommand( "gm_spawn", j, 0 ) - end - propgrid:Add(itm) - end - --layout:Add(combipanel) - end +function PANEL:Paint() + draw.RoundedBox(0,0,0,self:GetWide(), self:GetTall(), Color(48,48,48,125)) +end - --Make the tools menu - local toollist = vgui.Create( "DPanelList", tooltab ) - toollist:Dock(FILL) - - local bAlt = true - local NumTools = 0 - PrintTable(spawnmenu.GetTools()[1]["Items"][1]) - for k, v in pairs( spawnmenu.GetTools()[1]["Items"][1] ) do - if(!isnumber(k)) then return end - local Item = vgui.Create( "DButton", toollist) - Item:SetSize(frame:GetWide(),20) - Item:SetText(v.Text) - Item.DoClick = function() - LocalPlayer():ConCommand( v.Command ) - end - --[[ - if ( table.HasValue( GMS.ProhibitedStools, v.ItemName ) ) then continue end - NumTools = NumTools + 1 +vgui.Register( "Inventory", PANEL, "DPanel" ) - local Item = vgui.Create( "DComboBox", toollist ) - Item:SetText( v.Text or "Test") - Item.OnSelect = function( button ) self:EnableControlPanel( button ) end - concommand.Add( Format( "tool_%s", v.ItemName ), function() Item:OnSelect() end ) +// Structures - if ( v.SwitchConVar ) then - Item:AddCheckBox( v.SwitchConVar ) +local PANEL = {} + +function PANEL:Init() + + local dpnl = vgui.Create( "DScrollPanel", self ) + dpnl:SetSize( dPanelWidth, dPanelHeight ) + dpnl:SetPos( 0, 0 ) + + + local col = 0 + local row = 0 + i = 0 + for k,v in SortedPairs(GMS.Combinations["Structures"]) do + + local slot = vgui.Create("DButton", dpnl) + slot:SetSize(dPanelWidth/5, 100) + slot:SetText("") + + local modelPanel = vgui.Create( "DModelPanel", slot ) + modelPanel:SetFont("StructureText") + modelPanel:SetText(v.Name) + modelPanel:SetSize( slot:GetWide(), slot:GetTall() ) + modelPanel:SetModel( v.BuildSiteModel ) + modelPanel:SetCamPos( Vector( 50,50,50 ) ) + modelPanel:SetLookAt( Vector( 0, 0, 20 ) ) + modelPanel.DoClick = function() + LocalPlayer():ConCommand("gms_MakeCombination Structures " .. k ) end + + if (i % 5 != 0 ) then + slot:SetPos(row*dPanelWidth/5, (col-1)*100) + row=row+1 + else + row=0 + col=col+1 + slot:SetPos(row*dPanelWidth/5, (col-1)*100) + row=row+1 + end + i=i+1 + end + +end + +function PANEL:Paint() + draw.RoundedBox(0,0,0,self:GetWide(), self:GetTall(), Color(48,48,48,125)) +end + +vgui.Register( "Structures", PANEL, "DPanel" ) + +// Combinations + +local PANEL = {} + +function PANEL:Init() + + local dpnl = vgui.Create( "DScrollPanel", self ) + dpnl:SetSize( dPanelWidth, dPanelHeight ) + dpnl:SetPos( 0, 0 ) - Item.ControlPanelBuildFunction = v.CPanelFunction - Item.Command = v.Command - Item.Name = v.ItemName - Item.Controls = v.Controls - Item.Text = v.Text - --Item:SetAlt( bAlt ) - bAlt = !bAlt - ]] - toollist:AddItem( Item ) + local col = 0 + local row = 0 + i = 0 + for k,v in SortedPairs(GMS.Combinations["Combinations"]) do + + local slot = vgui.Create("DButton", dpnl) + slot:SetSize(dPanelWidth/5, 100) + slot:SetTooltip(createTooltipTextFor(v.Req)) + slot.DoClick = function() + --print("I want to combine a " .. v.Name) + LocalPlayer():ConCommand("gms_MakeCombination Combinations " .. v.Name) + end + + if (i % 5 != 0 ) then + slot:SetPos(row*dPanelWidth/5, (col-1)*100) + row=row+1 + else + row=0 + col=col+1 + slot:SetPos(row*dPanelWidth/5, (col-1)*100) + row=row+1 + end + + slot.Paint = function() + draw.RoundedBox( 0, 1, 1, slot:GetWide()-2, slot:GetTall()-2, Color( 250, 250, 250, 250 ) ) + draw.RoundedBox( 8, 4, 4, slot:GetWide()-8, slot:GetTall()-8, Color( 0, 0, 0, 250 ) ) + + surface.SetFont( "ButtonText" ) + surface.SetTextColor( 255,255,255 ) + surface.SetTextPos( (slot:GetWide()/2) - ( surface.GetTextSize(k)/2 ), (slot:GetTall()/2) + (select( 2, surface.GetTextSize( k ) )/2) ) + surface.DrawText( v.Name ) + end + + local img = vgui.Create("DImage", slot) + img:SetPos(0, 0) + img:SetSize(slot:GetWide(), slot:GetTall()-20) + img:SetImage("gms_icons/gms_weapon.png") + + + i=i+1 end - return frame end +function PANEL:Paint() + draw.RoundedBox(0,0,0,self:GetWide(), self:GetTall(), Color(48,48,48,125)) +end + +vgui.Register( "Combinations", PANEL, "DPanel" ) + +// Equipment + +local PANEL = {} + +function PANEL:Init() + +end + +function PANEL:Paint() + +end + +vgui.Register( "Equipment", PANEL, "DPanel" ) + +// Props + +local PANEL = {} + +function PANEL:Init() + +end + +function PANEL:Paint() + +end + +vgui.Register( "Props", PANEL, "DPanel" ) + +// Tools + +local PANEL = {} + +function PANEL:Init() + +end + +function PANEL:Paint() + +end + +vgui.Register( "Tools", PANEL, "DPanel" ) + + +// Admin + +local PANEL = {} + +function PANEL:Init() + +end + +function PANEL:Paint() + +end + +vgui.Register( "Admin", PANEL, "DPanel" ) + + local invpanel = nil function GM:OnSpawnMenuOpen() |
