summaryrefslogtreecommitdiff
path: root/gamemode/client/cl_inventory.lua
blob: ab6f196f13b505356f8ef3abfdcdb425fdcc53bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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 function createMenuFor(menu, tbl)
  for k,v in pairs(tbl) do
    if(isfunction(v)) then --This is a dead-end, add the menu
      local thisoption = menu:AddOption(k,v)
    else --Otherwise it should be a table, recursively call to create
      local submenu = menu:AddSubMenu(k)
      createMenuFor(submenu,v)
    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

  local tabsheet = vgui.Create("DPropertySheet", frame)
  tabsheet:Dock(FILL)

  local invtab = vgui.Create("DPanel",tabsheet)
  tabsheet:AddSheet( "Inventory", invtab, "icon16/database.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" )
  if(LocalPlayer():IsAdmin()) then
    local admintab = vgui.Create("DPanel",tabsheet)
    tabsheet:AddSheet("Admin", admintab, "icon16/bullet_star.png")
  end

  --Inventory

  local layout = vgui.Create( "DTileLayout", invtab )
  layout:SetBaseSize( 64 ) -- Tile size
  layout:Dock( FILL )

  layout:MakeDroppable( "unique_name" ) -- Allows us to rearrange children
  PrintTable(Resources)
  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)
    end

    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")
        createMenuFor(menu,GMS.Resources[k].Actions)
        menu:Open()
      end
    end
    layout:Add( selection )
  end

  return frame
end

local invpanel = nil
function GM:OnSpawnMenuOpen()
  print("Spawn menu hooked correctly")

  if(invpanel == nil) then
    invpanel = createPanel()
    return
  end
  print("Not nil")
  if(! invpanel:IsValid()) then
    invpanel = createPanel()
    return
  end
end

function GM:ReloadSpawnMenu()
  if(!invpanel:IsValid()) then
    return
  end
  if(invpanel != nil) then
    invpanel:Close()
    invpanel = createPanel()
  end
end

function GM:OnSpawnMenuClose()

end

function GM:SpawnMenuEnabled()
	return false
end