summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gamemode/client/cl_inventory.lua608
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()