aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem/quests
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2018-03-23 15:20:30 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2018-03-23 15:20:30 -0400
commitd2868db28210b8c4debab2b70dca2833d582fdfd (patch)
tree17ad5beb46e3b1c3c17d520a71a4c1ea12c47f51 /gamemode/inventorysystem/quests
parenta7f7bed257dd96b1027c6343cd59eea4eee9fc3b (diff)
downloadartery-d2868db28210b8c4debab2b70dca2833d582fdfd.tar.gz
artery-d2868db28210b8c4debab2b70dca2833d582fdfd.tar.bz2
artery-d2868db28210b8c4debab2b70dca2833d582fdfd.zip
Refactored the inventory system
Inventory system now uses flyweight pattern with metatables.
Diffstat (limited to 'gamemode/inventorysystem/quests')
-rw-r--r--gamemode/inventorysystem/quests/cl_quests.lua62
-rw-r--r--gamemode/inventorysystem/quests/sh_quests.lua69
2 files changed, 131 insertions, 0 deletions
diff --git a/gamemode/inventorysystem/quests/cl_quests.lua b/gamemode/inventorysystem/quests/cl_quests.lua
new file mode 100644
index 0000000..2052e19
--- /dev/null
+++ b/gamemode/inventorysystem/quests/cl_quests.lua
@@ -0,0 +1,62 @@
+
+local inv = {}
+--the gui elements
+local elements = {}
+
+local questlist = nil
+local questlog = nil
+local function add_quest(panel,quest)
+
+end
+
+inv.DrawOnDPanel = function(self,panel)
+ local spanel = vgui.Create("DPanel", panel)
+ spanel:Dock(FILL)
+ local halfs = vgui.Create("DVerticalDivider",spanel)
+ questlist = vgui.Create("DListLayout", spanel)
+ questlog = vgui.Create("DLabel",spanel)
+ halfs:SetBottom(questlist)
+ halfs:SetTop(questlog)
+ questlist:Dock(FILL)
+ questlog:Dock(FILL)
+ for k,v in pairs(self.track) do
+ local questbutton = vgui.Create("DButton",questlist)
+ questbutton:SetText(v.QuestName)
+ questbutton.DoClick = function()
+ questlog:SetText(v:GetText())
+ end
+ for i,j in pairs(v) do
+ local ipanel = vgui.Create("DListLayout",layout)
+ local label = vgui.Create("DLabel",ipanel)
+ label:Dock(TOP)
+ label:SetDark(true)
+ local bar = vgui.Create("DProgress",ipanel)
+ bar:Dock(TOP)
+ elements[j] = {
+ ["label"] = label,
+ ["bar" ] = bar,
+ }
+ set_xp_of(j,self.skills[j] or 0)
+ ipanel:Add(label)
+ ipanel:Add(bar)
+ ipanel:InvalidateLayout()
+ ipanel:SizeToChildren(true,true)
+ layout:Add(ipanel)
+ end
+ layout:Dock(FILL)
+ sheet:AddSheet(k, spanel, "icon16/cross.png")
+ end
+
+ local prox = {}
+ prox.Put = function(s,position,item)
+ --Observer might be called before our put()
+ end
+
+ prox.Remove = function(s,position)
+ --
+ end
+
+ return prox
+end
+
+return inv
diff --git a/gamemode/inventorysystem/quests/sh_quests.lua b/gamemode/inventorysystem/quests/sh_quests.lua
new file mode 100644
index 0000000..3515d61
--- /dev/null
+++ b/gamemode/inventorysystem/quests/sh_quests.lua
@@ -0,0 +1,69 @@
+--[[
+ Quests must have an Arcs field
+
+]]
+local reg = nrequire("inventory/inventory.lua")
+local itm = nrequire("item.lua")
+local inv = {}
+if CLIENT then
+ inv = nrequire("cl_quests.lua")
+end
+
+inv.Name = "Quests"
+inv.track = {}
+function inv:FindPlaceFor(item)
+ if item.Arcs ~= nil then
+ return {#self.track}
+ end
+ return nil
+end
+function inv:CanFitIn(pos,item)
+ return pos[1] == #self.track
+end
+function inv:Put(pos,item)
+ print("Added a quest:")
+ PrintTable(item)
+ self.track[pos[1]] = item
+end
+function inv:Has(a)
+ if type(a) == "string" then
+ for k,v in pairs(self.track) do
+ if v == a then return {k} end
+ end
+ elseif type(a) == "function" then
+ for k,v in pairs(self.track) do
+ if a(v) then return {k} end
+ end
+ end
+ return nil
+end
+function inv:Remove(pos)
+ for i = 1,pos[1] do
+ self.track[i] = self.track[i + 1]
+ end
+end
+function inv:Get(pos)
+ return self.track[pos[1]]
+end
+function inv:Serialize()
+ local ret = {}
+ for k,v in pairs(self.track) do
+ ret[v.Name] = v:Serialize()
+ end
+ return util.TableToJSON(ret)
+end
+
+function inv:DeSerialize(str)
+ self.track = {}
+ local tbl = util.JSONToTable(str)
+ tbl = tbl or {}
+ local i = 1
+ for k,v in pairs(tbl) do
+ local this_prayer = itm.GetItemByName(k):DeSerialize(v)
+ self:Put({i},this_prayer)
+ end
+ return self
+end
+
+
+reg.RegisterInventory(inv)