aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem/skills/cl_skills.lua
blob: fed0f4646890b938aa2c890e1eacb1b44566616b (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
local inv = {}
local sc = nrequire("sh_skillcommon.lua")
--the gui elements
local elements = {}

--return level, frac
local xpmult = 1.5 --the lower, the more lvl per xp
local levelfunc = function(val)
	local curlvl = math.log(val,xpmult)
	local prevlvlxp = xpmult ^ math.floor(curlvl)
	local nextlvlxp = xpmult ^ (math.floor(curlvl) + 1)
	local sp = nextlvlxp - prevlvlxp
	local frac = (val - prevlvlxp) / ((sp ~= 0) and sp or 1) --don't divide by 0
	return math.floor(curlvl), frac
end

local set_xp_of = function(name,ammt)
	print("setting xp of", name," to ", ammt)
	local lvl,frac = levelfunc(ammt)
	elements[name].label:SetText(string.format("%s : %d (%2.5f%%)",name,lvl,frac))
	elements[name].bar:SetFraction(frac)
end

inv.DrawOnDPanel = function(self,panel)
	print("Drawing skills on panel")
	PrintTable(sc.SkillList())
	print("with")
	PrintTable(self.skills)
	local sheet = vgui.Create( "DColumnSheet", panel )
	sheet:Dock( FILL )

	for k,v in pairs(sc.SkillList()) do
		local spanel = vgui.Create("DPanel", sheet)
		spanel:Dock(FILL)
		local layout = vgui.Create("DListLayout", spanel)
		layout:MakeDroppable("skill_layout")
		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)
		print("Calling inventory's put")
		print("At time of call, skill was")
		PrintTable(self)
		set_xp_of(position[1],self.skills[position[1]] or item.ammt)--Observer might be called before our put()
	end

	prox.Remove = function(s,position)
		print("Calling inventory's remove")
		set_xp_of(position[1],self.skills[position[1]] or itm.ammt)
	end

	return prox
end

return inv