From da81a0a23a3704dd2de3ab2249496c1ad1912d1c Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Mon, 9 Oct 2017 16:20:46 -0400 Subject: Updated internal representation of inventories --- gamemode/client/cl_inventory.lua | 64 ++++++++--- gamemode/client/qpanels/inventory.lua | 194 -------------------------------- gamemode/client/qpanels/prayers.lua | 170 ---------------------------- gamemode/client/qpanels/quests.lua | 31 ----- gamemode/client/qpanels/skills.lua | 10 -- gamemode/client/qtabs/cl_qinventory.lua | 1 + 6 files changed, 52 insertions(+), 418 deletions(-) delete mode 100644 gamemode/client/qpanels/inventory.lua delete mode 100644 gamemode/client/qpanels/prayers.lua delete mode 100644 gamemode/client/qpanels/quests.lua delete mode 100644 gamemode/client/qpanels/skills.lua (limited to 'gamemode/client') diff --git a/gamemode/client/cl_inventory.lua b/gamemode/client/cl_inventory.lua index 92eae94..4e2545d 100644 --- a/gamemode/client/cl_inventory.lua +++ b/gamemode/client/cl_inventory.lua @@ -8,7 +8,7 @@ 3 - Skills 4 - Quests ]] -local qinv = nrequire("cl_qinventory.lua") +--local qinv = nrequire("cl_qinventory.lua") local state = nrequire("cl_state.lua") --Holds weather or not player is in inventory local itm = nrequire("core/inventory/common/items.lua") --local qpray = nrequire("cl_qprayers.lua") @@ -38,6 +38,8 @@ local creditslabel local droppanel --Dpanel to drop things on when they are dropped, should be the backmost panel, and cover the entire screen. inv.tabsheet = nil +local clt = nrequire("cl_invtracker.lua") + local player_data --The data the player needs to show the q panel net.Receive("art_load_player_data",function() --print("Got player data") @@ -49,6 +51,34 @@ net.Receive("art_load_player_data",function() --print("Credits was", credits) end) +local function CreateSheetTree(tabs,dpropertysheet) + print("Createing sheet tree!") + PrintTable(tabs) + for k,v in pairs(tabs) do + if type(k) == "string" then + print("Makeing inventory ", k) + local tsheet = vgui.Create( "DPropertySheet", dpropertysheet ) + dpropertysheet:AddSheet(k,tsheet,"icon16/user.png") + CreateSheetTree(v,tsheet) + elseif type(k) == "number" then + print("Makeing inventory number ", k) + local tsheet = vgui.Create("DPanel") + dpropertysheet:AddSheet(v.Name,tsheet,"icon16/user.png") + v:DrawOnDPanel(tsheet) + else + error("k was not a number or string, it was a " .. type(k)) + end + end + --local invsheet = qinv.CreateInventorySheet(inv.tabsheet) + --qpray.CreatePrayerSheet(tabsheet) + --invsheet.id = #qtabs + 1 + --qtabs[#qtabs + 1] = invsheet + --prasheet.id = #qtabs + 1 + --qtabs[#qtabs + 1] = prasheet + --inv.tabsheet:AddSheet("Inventory",invsheet,"icon16/user.png") + --tabsheet:AddSheet("Prayers",prasheet,"icon16/user.png") +end + local function BuildInventory() --print("Building inventory") if qframe and IsValid(qframe) then return end @@ -80,17 +110,10 @@ local function BuildInventory() creditstext:SetText("Credits:") creditstext:SetPos(100,5) - inv.tabsheet = vgui.Create("DPropertySheet",qframe) - inv.tabsheet:Dock(FILL) + local initalsheet = vgui.Create("DPropertySheet",qframe) + initalsheet:Dock(FILL) - local invsheet = qinv.CreateInventorySheet(inv.tabsheet) - --qpray.CreatePrayerSheet(tabsheet) - invsheet.id = #qtabs + 1 - qtabs[#qtabs + 1] = invsheet - --prasheet.id = #qtabs + 1 - --qtabs[#qtabs + 1] = prasheet - inv.tabsheet:AddSheet("Inventory",invsheet,"icon16/user.png") - --tabsheet:AddSheet("Prayers",prasheet,"icon16/user.png") + CreateSheetTree(clt.known_inventories,initalsheet) end @@ -139,13 +162,20 @@ local viewdistance = 100 local rotatespeed = 65 local bone = nil local previousheadscale = Vector(1,1,1) +local toggle_arteryview = true hook.Add("CalcView","ArteryInventoryView",function(ply,pos,ang,fov,nearz,farz) + if not toggle_arteryview then return end if bone == nil then bone = LocalPlayer():LookupBone("ValveBiped.Bip01_Head1") end local view = {} --view.origin = LocalPlayer():GetBonePosition(bone) + LocalPlayer():GetUp() * 2 - view.origin = pos + local tr = util.TraceLine({ + start = pos, + endpos = (ang:Forward() * -100) + pos, + filter = LocalPlayer() + }) + view.origin = tr.HitPos or (ang:Forward() * -100) + pos if state.invopen then local trot = math.rad(CurTime() * rotatespeed) local xoff = viewdistance * math.sin(trot) @@ -161,9 +191,17 @@ hook.Add("CalcView","ArteryInventoryView",function(ply,pos,ang,fov,nearz,farz) else LocalPlayer():ManipulateBoneScale(bone,previousheadscale) end - view.drawviewer = state.invopen + view.drawviewer = true--state.invopen return view end) +concommand.Add("delete_inventory",function(ply,cmd,args) + qframe = nil +end) + +concommand.Add("toggle_artery_view",function(ply,cmd,args) + toggle_arteryview = not toggle_arteryview +end) + return inv diff --git a/gamemode/client/qpanels/inventory.lua b/gamemode/client/qpanels/inventory.lua deleted file mode 100644 index 4dc5075..0000000 --- a/gamemode/client/qpanels/inventory.lua +++ /dev/null @@ -1,194 +0,0 @@ --- do return end --- local invfuncs --- invfuncs = ART.invfuncs --- --invfuncs = include("../gamemodes/artery/gamemode/shared/inventory_common.lua") --- --invfuncs = include("../shared/inventory_common.lua") --- assert(invfuncs ~= nil, "Dependency failed") --- --- 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 DrawBackpackOnDPanel(dp, backpack, backpacknum, tent) --- local width = ScrW() --- local height = ScrH() --- local slotsize = math.Round(width / 32) --- local backgrid = vgui.Create( "DGrid", dp ) --- backgrid:SetPos( 10, 30 ) --- backgrid:SetCols( backpack[2][1] ) --- backgrid:SetColWide( backpack[2][2] ) --- backgrid:Dock(FILL) --- for i = 1,#(backpack[1]) do --- for j = 1,#(backpack[1][i]) do --- local item = backpack[1][j][i] --- if type(backpack[1][j][i]) == "table" then --- local itemwidth = 0 --- for _,l in pairs(item.Shape) do --- itemwidth = math.Max(itemwidth,#l) --- end --- local itemheight = #item.Shape --- local invicon = vgui.Create( "DImageButton", dp ) --- invicon:SetSize(slotsize * itemwidth, slotsize * itemheight) --- invicon:SetPos(slotsize * (i - 1), slotsize * (j - 1)) --- invicon:SetText(item.Name) --- if item.Tooltip then --- invicon:SetTooltip(item.Tooltip) --- end --- if item.Paint then --- invicon.Paint = item.Paint --- end --- if item.DoOnPanel then --- item.DoOnPanel(invicon) --- end --- --invicon.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(0,100,0)) end --- invicon.DoClick = function() --- if not item.GetOptions then return end --- local menu = vgui.Create("DMenu") --- createMenuFor(menu,item:GetOptions()) --- menu:Open() --- end --- invicon.Item = item --- invicon.invpos = {j,i} --- invicon.ent = tent --- invicon.backpacknum = backpacknum --- invicon:Droppable("Inventory") --- elseif not backpack[1][j][i] then --- local emptyslot = vgui.Create("DPanel", dp) --- emptyslot:SetSize(slotsize,slotsize) --- emptyslot:SetPos(slotsize * (i - 1), slotsize * (j - 1)) --- --emptyslot.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(0,0,100)) end --- emptyslot:Receiver( "Inventory", function( receiver, tableOfDroppedPanels, isDropped, menuIndex, mouseX, mouseY ) --- if not isDropped then return end --- local icon = tableOfDroppedPanels[1] --- local item = icon.Item --- local curpos = icon.invpos --- --Set the shape it was at to false --- if not icon.wasequiped and icon.ent == tent then --- assert(curpos ~= nil, "print curpos was nil when not equiped") --- for k = 1,#item.Shape do --- for l = 1,#(item.Shape[k]) do --- if k == 1 and l == 1 then continue end --- backpack[1][curpos[1] + k - 1][curpos[2] + l - 1] = false --- end --- end --- backpack[1][curpos[1]][curpos[2]] = false --- end --- if invfuncs.CanFitInBackpack(backpack,j,i,item) then --- local fromtbl = icon.invpos --- local wasequiped = icon.wasequiped --- local ondropped = icon.ondropped --- if ondropped then --- ondropped(backpacknum,j,i,item) --- elseif wasequiped then --- net.Start("unequipitem") --- net.WriteString(wasequiped) --- net.WriteUInt(backpacknum,16) --- net.WriteUInt(i,16) --- net.WriteUInt(j,16) --- net.SendToServer() --- else --- net.Start("moveitem") --- net.WriteEntity(icon.ent) -- from ent --- net.WriteEntity(tent) -- to ent --- net.WriteUInt(icon.backpacknum,16) -- from backpack number --- net.WriteUInt(backpacknum,16) -- to backpack number --- net.WriteUInt(fromtbl[1],16) -- From position --- net.WriteUInt(fromtbl[2],16) --- net.WriteUInt(j,16) -- To position --- net.WriteUInt(i,16) --- net.SendToServer() --- if item.onEquip ~= nil then --- item:onEquip(LocalPlayer()) --- end --- end --- end --- end, {} ) --- end --- end --- end --- end --- --- local invsheetfunc = function() --- local width = ScrW() --- local height = ScrH() --- --- --- local invsheet = vgui.Create( "DPanel" ) --- --- invsheet.Paint = function( self, w, h ) end --- --- --Display gear --- local slotsize = math.Round(width / 32) --- local displaypos = { --- ["Head"] = {(width / 8) - slotsize, 25}, --- ["Body"] = {(width / 8) - slotsize, slotsize + 26}, --- ["Legs"] = {(width / 8) - slotsize, (slotsize * 2) + 27}, --- ["Boots"] = {(width / 8) - slotsize, (slotsize * 3) + 28}, --- ["Gloves"] = {(width / 8) + (slotsize), (slotsize * 2) + 27}, --- ["Left"] = {(width / 8) - (1.5 * slotsize), (slotsize * 4) + 29}, --- ["Right"] = {(width / 8) - (0.5 * slotsize), (slotsize * 4) + 29} --- } --- for k,v in pairs (LocalPlayer().Inventory.Equiped) do --- if v == false then --- local eqslot = vgui.Create( "DPanel", invsheet ) --- eqslot:SetSize( slotsize, slotsize ) --- eqslot:SetPos(displaypos[k][1],displaypos[k][2]) --- eqslot:Receiver( "Inventory", function( receiver, tableOfDroppedPanels, isDropped, menuIndex, mouseX, mouseY ) --- if not isDropped then return end --- print("Attempting to equip") --- local icon = tableOfDroppedPanels[1] --- local item = icon.Item --- if item.Equipable == k then --- net.Start("equipitem") --- net.WriteUInt(icon.backpacknum,16) -- Backpack number --- local fromtbl = icon.invpos --- net.WriteUInt(fromtbl[1],16) -- From position --- net.WriteUInt(fromtbl[2],16) --- net.WriteString(k) --- net.SendToServer() --- end --- end, {} ) --- else --- local eqslot = vgui.Create("DImageButton",invsheet) --- eqslot:SetSize(slotsize,slotsize) --- eqslot:SetPos(displaypos[k][1],displaypos[k][2]) --- if v.PaintEquiped then --- eqslot.Paint = v.PaintEquiped --- end --- if v.DoOnEquipPanel then --- v.DoOnEquipPanel(eqslot) --- end --- eqslot:Droppable("Inventory") --- eqslot.Item = v --- eqslot.wasequiped = k --- end --- end --- local moneylabel = vgui.Create("DLabel",invsheet) --- moneylabel:SetPos(0,0) --- moneylabel:SetSize(width/5,18) --- moneylabel:SetText(string.format("Credits:%7d", ART.Credits or 0)) --- print("Displaying credits:" .. string.format("Credits:%7d", ART.Credits or 0)) --- --- local backpacksheet = vgui.Create( "DPropertySheet", invsheet ) --- backpacksheet:SetPos(0,slotsize * 6) --- backpacksheet:SetSize((width / 4) - 26, height - (slotsize * 6) - 70) --- for k,v in pairs(LocalPlayer().Inventory.Backpacks) do --- local tbacksheet = vgui.Create( "DPanel", backpacksheet ) --- tbacksheet.Paint = function( self, w, h ) draw.RoundedBox( 4, 0, 0, w, h, Color( 157, 160, 167 ) ) end --- backpacksheet:AddSheet( v[3], tbacksheet, "icon16/cross.png" ) --- --- DrawBackpackOnDPanel(tbacksheet,v,k,LocalPlayer()) --- end --- --- return "Inventory", invsheet, "icon16/cross.png" --- end --- --- --- ART.RegisterInventorySheet(invsheetfunc) diff --git a/gamemode/client/qpanels/prayers.lua b/gamemode/client/qpanels/prayers.lua deleted file mode 100644 index 674d5d8..0000000 --- a/gamemode/client/qpanels/prayers.lua +++ /dev/null @@ -1,170 +0,0 @@ --- do return end --- local refreshboundprayers --- local infopart --- local prayersheet --- --- local function displaydefaulthelp(panel) --- local ll = vgui.Create("DLabel",panel) --- ll:Dock(FILL) --- ll:SetWrap(true) --- ll:SetDark(true) --- ll:SetText("Oh no! It looks like this dosen't have any help text yet!") --- end --- --- local function createprayericon(parrent,prayer,equiped,place) --- --- local width = ScrW() --- local height = ScrH() --- --- local ret = vgui.Create("DButton",parrent) --- ret:SetText(prayer) --- ret:SetWrap(true) --- ret:SetSize(64,64) --- local prayertbl = ART.GetPrayerByName(prayer) --- assert(prayertbl ~= nil, "Could not find an appropriate prayer!") --- if prayertbl.Paint then --- ret.Paint = prayertbl.Paint --- end --- if prayertbl.DoOnPanel then --- prayertbl.DoOnPanel(ret) --- end --- if equiped then --- ret.DoClick = function(self) --- self:Remove() --- ART.PrayerEquiped[place] = false --- refreshboundprayers() --- infopart:Remove() --- infopart = vgui.Create("DPanel") --- infopart:SetSize( (width / 4) - 10, height / 3) --- infopart:SetPos(0, height * 2 / 3) --- prayersheet:Add(infopart) --- end --- else --- ret:Droppable("PrayerBind") --- ret.PrayerName = prayer --- ret:SetSize(64,64) --- ret.DoClick = function(self) --- infopart:Remove() --- infopart = vgui.Create("DPanel") --- infopart:SetSize( (width / 4) - 10, height / 3) --- prayersheet:Add(infopart) --- local rettbl = ART.GetPrayerByName(prayer) --- if rettbl.DisplayHelp ~= nil then --- rettbl.DisplayHelp(infopart) --- else --- displaydefaulthelp(infopart) --- end --- end --- end --- return ret --- end --- --- local function createreceiver(parrent,num) --- local prayerbut = vgui.Create( "DPanel", parrent ) --- local prayerlabel = vgui.Create("DLabel",prayerbut) --- prayerlabel:SetText( "F" .. num ) --- prayerlabel.Paint = function( self, w, h ) end --- prayerlabel:SetWrap(true) --- prayerlabel:SetDark(true) --- prayerlabel:Dock(FILL) --- prayerbut:Dock(FILL) --- prayerbut:Receiver( "PrayerBind", function( self, tableOfDroppedPanels, isDropped, menuIndex, mouseX, mouseY ) --- if not isDropped then return end --- local pname = tableOfDroppedPanels[1].PrayerName --- print("Prayer name:") --- print(pname) --- ART.PrayerEquiped[num] = pname --- print("Prayer bound to " .. num) --- prayerbut:Remove() --- createprayericon(parrent,pname,true,num) --- end) --- end --- --- local function displayboundprayers(panel) --- --- local width = ScrW() --- local height = ScrH() --- --- local prayerbindgrid = nil --- --- refreshboundprayers = function() --- --- if prayerbindgrid ~= nil then prayerbindgrid:Remove() end --- --- prayerbindgrid = vgui.Create("DGrid") --- prayerbindgrid:SetPos(height * (2 / 3),5) --- prayerbindgrid:SetSize((width / 4) - 20, height / 3) --- prayerbindgrid:SetColWide(64) --- prayerbindgrid:SetRowHeight(64) --- function prayerbindgrid:Paint(w,h) --- draw.RoundedBox( 8, 0, 0, w, h, Color( 0, 255, 0 ) ) --- end --- --- for k,v in pairs(ART.PrayerEquiped) do --- local but = vgui.Create( "DPanel", prayerbindgrid ) --- but:SetSize(64, 64) --- if v ~= false then --- createprayericon(but,v,true,k) --- else --- createreceiver(but,k) --- end --- prayerbindgrid:AddItem(but) --- end --- panel:Add(prayerbindgrid) --- end --- refreshboundprayers() --- end --- --- ART.RegisterInventorySheet(function() --- --- local width = ScrW() --- local height = ScrH() --- --- prayersheet = vgui.Create( "DListLayout") --- --- local prayergridscroll = vgui.Create("DScrollPanel") --- prayergridscroll:SetSize( (width / 4) - 20, height / 3 ) --- prayergridscroll:SetPos( 5, 5 ) --- prayersheet:Add(prayergridscroll) --- local prayergrid = vgui.Create( "DGrid", prayergridscroll ) --- prayergrid:SetPos( 5 , 5 ) --- prayergrid:Dock(FILL) --- --- prayergrid:SetCols( (width / 4) / 64 ) --- prayergrid:SetColWide( 64 ) --- prayergrid:SetRowHeight(64) --- prayergridscroll:AddItem(prayergrid) --- --- for k,v in pairs(ART.MyPrayer) do --- print("Displaying prayer:" .. k) --- print("Type:" .. type(k)) --- if k == "" then --- ART.MyPrayer[k] = nil --- end --- local but = createprayericon(prayergrid,k,false,nil) --- prayergrid:AddItem(but) --- end --- --- displayboundprayers(prayersheet) --- --- infopart = vgui.Create("DPanel") --- infopart:SetSize( (width / 4) - 10, height / 3) --- infopart:SetPos(0, height * 2 / 3) --- prayersheet:Add(infopart) --- --- return "Prayers", prayersheet, "icon16/tick.png" --- end) --- --- hook.Add("Think","art_prayer_keybinds",function() --- local mapping = { --- KEY_F1, --- KEY_F2, --- KEY_F3, --- KEY_F4, --- } --- for k,v in pairs(mapping) do --- if input.IsKeyDown(v) and ART.PrayerEquiped[k] then --- ART.GetPrayerByName(ART.PrayerEquiped[k]).Pray() --- end --- end --- end) diff --git a/gamemode/client/qpanels/quests.lua b/gamemode/client/qpanels/quests.lua deleted file mode 100644 index eda9e31..0000000 --- a/gamemode/client/qpanels/quests.lua +++ /dev/null @@ -1,31 +0,0 @@ --- do return end --- --- ART.RegisterInventorySheet(function() --- --- local width = ScrW() --- local height = ScrH() --- --- local questsheet = vgui.Create( "DPanel") --- questsheet.Paint = function(self,w,h) end --- --- --Display quests --- local questselector = vgui.Create( "DScrollPanel", questsheet ) --- questselector:SetSize((width / 4) - 20, (height / 2) - 40) --- questselector:SetPos(0,0) --- local questinfo = vgui.Create("DScrollPanel", questsheet) --- questinfo:SetSize(width / 4, height / 2) --- questinfo:SetPos(0,height / 2) --- for k,v in pairs(LocalPlayer().Quests or {}) do --- print("Displaying quest:" .. k) --- local questbutton = vgui.Create( "DButton" , questselector ) --- questbutton:Dock(TOP) --- questbutton:SetText(k) --- questbutton.DoClick = function() --- print("At point of clicking, art is:") --- PrintTable(ART) --- ART.GetQuest(k).DrawQuestInfo(questinfo,v) --- end --- end --- --- return "Quests", questsheet, "icon16/house.png" --- end) diff --git a/gamemode/client/qpanels/skills.lua b/gamemode/client/qpanels/skills.lua deleted file mode 100644 index 1904445..0000000 --- a/gamemode/client/qpanels/skills.lua +++ /dev/null @@ -1,10 +0,0 @@ --- do return end --- --- --- ART.RegisterInventorySheet(function() --- --- local skillsheet = vgui.Create( "DPanel" ) --- skillsheet.Paint = function( self, w, h ) end --- --- return "Skills", skillsheet, "icon16/tick.png" --- end) diff --git a/gamemode/client/qtabs/cl_qinventory.lua b/gamemode/client/qtabs/cl_qinventory.lua index 1e1ceb3..32fd441 100644 --- a/gamemode/client/qtabs/cl_qinventory.lua +++ b/gamemode/client/qtabs/cl_qinventory.lua @@ -1,6 +1,7 @@ --[[ One of the tabs in the inventory ]] +do return end local inv = nrequire("inventory/inventory.lua") local itm = nrequire("item.lua") --local state = nrequire("cl_state.lua") -- cgit v1.2.3-70-g09d2