aboutsummaryrefslogtreecommitdiff
path: root/gamemode/client/cl_inventory.lua
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2016-08-27 17:08:46 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2016-08-27 17:08:46 -0400
commit9adcb3c73a8d0e7ecfe66b30da630c6c2e67f03a (patch)
treed65b57e144317e5b49ccdd549b2f97c61d54bd1d /gamemode/client/cl_inventory.lua
parentd4f197a35c207c9891d3f4dc5e9708af48c935de (diff)
downloadartery-9adcb3c73a8d0e7ecfe66b30da630c6c2e67f03a.tar.gz
artery-9adcb3c73a8d0e7ecfe66b30da630c6c2e67f03a.tar.bz2
artery-9adcb3c73a8d0e7ecfe66b30da630c6c2e67f03a.zip
Moved prayers to their own system
Diffstat (limited to 'gamemode/client/cl_inventory.lua')
-rw-r--r--gamemode/client/cl_inventory.lua233
1 files changed, 115 insertions, 118 deletions
diff --git a/gamemode/client/cl_inventory.lua b/gamemode/client/cl_inventory.lua
index 837f7a1..b806846 100644
--- a/gamemode/client/cl_inventory.lua
+++ b/gamemode/client/cl_inventory.lua
@@ -3,11 +3,19 @@
]]
print("Hello from cl_inventory.lua")
--debug.Trace()
-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")
+
+ART.PrayerEquiped = ART.PrayerEquiped or {
+ false,false,false,false
+}
+
+local lastpanel = lastpanel or 1
+
+local inventorysheets = {}
+ART.RegisterInventorySheet = function(func)
+ inventorysheets[#inventorysheets + 1] = func
+end
+
+
local plyisininventory = false
--Displays a dropdown of options under the players mouse, if the option is clicked, does the function
@@ -15,7 +23,7 @@ local plyisininventory = false
--Be careful not to make this a recursive table.
local function createMenuFor(menu, tbl)
for k,v in pairs(tbl) do
- if(isfunction(v)) then --This is a dead-end, add the menu
+ 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)
@@ -24,102 +32,23 @@ local function createMenuFor(menu, tbl)
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
- if 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
+function ART.RefreshDisplays()
+ local discopy = LocalPlayer().invdisplays
+ LocalPlayer().invdisplays = {}
+ for k,ptbl in pairs(discopy) do
+ if not ptbl.panel:IsValid() then continue end
+ if ptbl.panel.Close ~= nil then
+ ptbl.panel:Close()
+ else
+ print(ptbl.panel)
+ error("panel has no close method")
+ ptbl.panel:Remove()
end
+ ptbl.redraw()
end
end
+local sheet
function ShowInventory(ply,cmd,args)
if plyisininventory then return end
LocalPlayer().invdisplays = LocalPlayer().invdisplays or {}
@@ -140,28 +69,83 @@ function ShowInventory(ply,cmd,args)
plyisininventory = false
end
- local sheet = vgui.Create( "DPropertySheet", invpanel )
+ sheet = vgui.Create( "DPropertySheet", invpanel )
sheet:Dock( FILL )
- local invsheet = vgui.Create( "DPanel", sheet )
- invsheet.Paint = function( self, w, h ) draw.RoundedBox( 4, 0, 0, w, h, Color( 157, 160, 167 ) ) end
- sheet:AddSheet( "Inventory", invsheet, "icon16/cross.png" )
+ for k,v in pairs(inventorysheets) do
+ local name,tsheet,image = v()
+ sheet:AddSheet(name,tsheet,image)
+ tsheet.sheetnum = name
+ end
+ sheet:SwitchToName(lastpanel)
+
+ --[[
+
+ local prayersheet = vgui.Create( "DListLayout", sheet)
+ sheet:AddSheet( "Prayers", prayersheet, "icon16/coins.png")
+
+ --Prayers
+ 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)
- local skillsheet = vgui.Create( "DPanel", sheet )
- skillsheet.Paint = function( self, w, h ) draw.RoundedBox( 4, 0, 0, w, h, Color( 157, 160, 167 ) ) end
- sheet:AddSheet( "Skills", skillsheet, "icon16/tick.png" )
+ prayergrid:SetCols( (width / 4) / 64 )
+ prayergrid:SetColWide( 64 )
+ prayergrid:SetRowHeight(64)
+ prayergridscroll:AddItem(prayergrid)
- local questsheet = vgui.Create( "DPanel", sheet)
- questsheet.Paint = function(self,w,h) draw.RoundedBox(4,0,0,w,h,Color(157,160,167)) end
- sheet:AddSheet( "Quests", questsheet, "icon16/house.png")
+ for k,v in pairs(ART.Prayer) do
+ local but = vgui.Create( "DButton", prayergrid )
+ but:SetText( v.Name )
+ but:SetSize( 64, 64 )
+ but:SetWrap(true)
+ prayergrid:AddItem( but )
+ but.PrayerName = v.Name
+ but:Droppable("PrayerBind")
+ end
+
+ local 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
+ local n = 0
+ for k,v in pairs(ART.PrayerEquiped) do
+ n = n + 1
+ local but = vgui.Create( "DPanel", prayerbindgrid )
+ but:SetSize(64, 64)
+ if v ~= false then
+ local prayerbut = vgui.Create( "DLabel", but )
+ prayerbut:SetText( v.Name )
+ prayerbut:SetSize( 64, 64 )
+ prayerbut:SetWrap(true)
+ else
+ local blabel = vgui.Create( "DLabel", but )
+ blabel:SetText( "F" .. k )
+ blabel:SetDark(true)
+ but:Receiver( "PrayerBind", function( self, tableOfDroppedPanels, isDropped, menuIndex, mouseX, mouseY )
+ if not isDropped then return end
+ ART.PrayerEquiped[k] = tableOfDroppedPanels.PrayerName
+ print("Prayer bound to " .. k)
+ end)
+ end
+ prayerbindgrid:AddItem(but)
+ end
+ prayersheet:Add(prayerbindgrid)
--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.Paint = function(self,w,h) draw.RoundedBox(4,0,0,w,h,Color(0,160,167)) end
+ questinfo:SetSize(width / 4, height / 2)
questinfo:SetPos(0,height / 2)
for k,v in pairs(LocalPlayer().Quests or {}) do
print("Displaying quest:" .. k)
@@ -223,8 +207,6 @@ function ShowInventory(ply,cmd,args)
if v.DoOnEqupPanel then
v.DoOnEqupPanel(eqslot)
end
- --eqslot:SetImage( "overviews/de_inferno", "vgui/avatar_default" )
- --eqslot.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(100,0,0)) end
eqslot:Droppable("Inventory")
eqslot.Item = v
eqslot.wasequiped = k
@@ -245,36 +227,51 @@ function ShowInventory(ply,cmd,args)
DrawBackpackOnDPanel(tbacksheet,v,k,LocalPlayer())
end
+ ]]
+
end
+
+
hook.Add("OnSpawnMenuOpen","ArteryOpenInventory",ShowInventory)
hook.Add("OnSpawnMenuClose","ArteryCloseInventory",function()
+ lastpanel = sheet:GetActiveTab():GetPanel().sheetnum
for k,v in pairs(LocalPlayer().invdisplays) do
if not v.panel:IsValid() then continue end
- PrintTable(v)
+ --PrintTable(v)
v.panel:Close()
LocalPlayer().invdisplays[k] = nil
end
- --if LocalPlayer().invpanel == nil then return end
- --LocalPlayer().invpanel:Remove()
plyisininventory = false
end)
concommand.Add("showinventory",ShowInventory)
local viewdistance = 100
local rotatespeed = 65
+local bone = nil
+local previousheadscale = Vector(1,1,1)
hook.Add("CalcView","ArteryInventoryView",function(ply,pos,ang,fov,nearz,farz)
+ if bone == nil then
+ bone = LocalPlayer():LookupBone("ValveBiped.Bip01_Head1")
+ end
local view = {}
+ --view.origin = LocalPlayer():GetBonePosition(bone) + LocalPlayer():GetUp() * 2
view.origin = pos
if plyisininventory then
- local xoff = viewdistance * math.sin(math.rad(CurTime() * rotatespeed))
- local yoff = viewdistance * math.cos(math.rad(CurTime() * rotatespeed))
- view.origin = view.origin + ( Vector(xoff,yoff,10) )
+ local trot = math.rad(CurTime() * rotatespeed)
+ local xoff = viewdistance * math.sin(trot)
+ local yoff = viewdistance * math.cos(trot)
+ view.origin = view.origin + Vector(xoff,yoff,10)
ang.pitch = 20
ang.yaw = (-CurTime() * rotatespeed) - 90
end
view.angles = ang
view.fov = fov
+ if not plyisininventory then
+ LocalPlayer():ManipulateBoneScale(bone,Vector(0,0,0))
+ else
+ LocalPlayer():ManipulateBoneScale(bone,previousheadscale)
+ end
view.drawviewer = plyisininventory
return view