diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2018-03-23 15:20:30 -0400 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2018-03-23 15:20:30 -0400 |
| commit | d2868db28210b8c4debab2b70dca2833d582fdfd (patch) | |
| tree | 17ad5beb46e3b1c3c17d520a71a4c1ea12c47f51 /gamemode/inventorysystem/quests | |
| parent | a7f7bed257dd96b1027c6343cd59eea4eee9fc3b (diff) | |
| download | artery-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.lua | 62 | ||||
| -rw-r--r-- | gamemode/inventorysystem/quests/sh_quests.lua | 69 |
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) |
