comparison Modules/Currency.lua @ 113:2105b6e5095f

- Added Blood of Sargeras to currency list - Fixed panel ordering issues when a module is loaded on the fly.
author Nick@Zahhak
date Sun, 26 Mar 2017 06:25:18 -0400
parents
children 6748c98a6c6c
comparison
equal deleted inserted replaced
112:7c77fde36287 113:2105b6e5095f
1 --
2 -- Created by IntelliJ IDEA.
3 -- User: Nick
4 -- Date: 3/25/2017
5 -- Time: 7:07 PM
6 -- To change this template use File | Settings | File Templates.
7 --
8
9 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
10
11 local zoneEvents = {
12 "ZONE_CHANGED_NEW_AREA", "ZONE_CHANGED_INDOORS", "ZONE_CHANGED"
13 }
14 local currencyEvents = {
15 'CURRENCY_DISPLAY_UPDATE', 'CHAT_MSG_CURRENCY'
16 }
17 local itemEvents = {
18 'CHAT_MSG_LOOT', 'BAG_UPDATE'
19 }
20
21 local blocks = {
22 ["Ancient Mana"] = {
23 currencyID = 1155,
24 zones = {
25 ['Suramar'] = true,
26 ["Sashj'tar Ruins"] = true,
27 ["Faronaar Ruins"] = true
28 }
29 },
30 ["Blood of Sargeras"] = {
31 itemID = 124124,
32 }
33 }
34 local items = {}
35
36
37 VeneerWorldStateCurrencyMixin = { Blocks = {} }
38 VeneerWorldStateCurrencyBlockMixin = {}
39 local module = VeneerWorldStateCurrencyMixin
40 local block = VeneerWorldStateCurrencyBlockMixin
41
42
43
44 local function RegisterEvents (frame, events)
45 for _, event in ipairs(events) do
46 print('|cFFFF0088'..(frame.name or frame:GetName())..'|r', 'listening to', event)
47 frame:RegisterEvent(event)
48 end
49 end
50
51 function module:OnLoad ()
52 self:RegisterEvent("PLAYER_ENTERING_WORLD");
53 self:RegisterEvent('PLAYER_REGEN_ENABLED')
54 self:RegisterEvent('PLAYER_REGEN_DISABLED')
55
56 for name, info in pairs(blocks) do
57 local frame = CreateFrame('Frame', nil, self, 'VeneerCurrencyTemplate')
58 frame.name = name
59 for k,v in pairs(info) do
60 print(name, k, '=', v)
61 frame[k] = v
62 end
63
64 local debug = function(...)
65 print('|cFF0088FF<'..frame.name..'>|r', ...)
66 end
67
68 if info.itemID then
69 local itemID = info.itemID
70 items[itemID] = {
71 count = 0,
72 frame = frame
73 }
74 frame.Update = function(block)
75 debug('Update [Item]')
76 if items[itemID].count >= 1 then
77 block.Icon:SetTexture(GetItemIcon(itemID))
78 block.Label:SetFormattedText("%d", items[itemID].count)
79 return true
80 end
81 end
82 RegisterEvents(self, itemEvents)
83 elseif info.currencyID then
84 local currencyID = info.currencyID
85 frame.Update = function (block)
86 debug('Update [Currency]')
87 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(currencyID)
88 block.Icon:SetTexture(texture)
89 block.Label:SetFormattedText("%d / %d", earned, totalMax)
90 block:SetWidth(block.Icon:GetWidth() + block.Label:GetStringWidth() + 6)
91 return true
92 end
93
94 RegisterEvents(frame, currencyEvents)
95 end
96 if info.zones then
97 RegisterEvents(frame, zoneEvents)
98 local zones = info.zones
99 local of = frame.Update
100 frame.Update = function(block)
101 debug('Update [Zone]')
102 local zone = self.zoneText
103 local canShow = (zone and block.zones[zone]) and true or false
104 if of then
105 canShow = canShow and of(frame)
106 end
107 return canShow
108 end
109 end
110 end
111 end
112
113 function module:OnEvent (event, arg)
114 print(self:GetName(), 'OnEvent', event, arg)
115 self:Update()
116 end
117 local toUpdate = {}
118 local wipe = table.wipe
119 function module:Update(isBatchUpdate)
120 print(self:GetName(), 'Update()')
121 if InCombatLockdown() then
122 self:SetShown(false)
123 return
124 end
125
126
127 for itemID in pairs(items) do
128 items[itemID].count = 0
129 end
130 self.zoneText = GetRealZoneText()
131 local canShow = false
132
133 for i = 0, NUM_BAG_SLOTS do
134 local numSlots = GetContainerNumSlots(i)
135 for j = 1, numSlots do
136 local itemID = GetContainerItemID(i, j)
137 local texture, count = GetContainerItemInfo(i,j)
138 if items[itemID] then
139 items[itemID].count = items[itemID].count + (count or 1)
140 items[itemID].texture = texture
141 print('tracked currency tally', items[itemID].count, '|T'..texture..':16:16|t')
142 items[itemID].frame.Icon:SetTexture(texture)
143 end
144 end
145 end
146
147 for itemID, info in pairs(items) do
148 end
149
150 local lastBlock
151 local totalWidth = 0
152 for _, block in ipairs(self.Blocks) do
153 local blockIsShown = block:Update() or false
154 block:SetShown(blockIsShown)
155 canShow = canShow or blockIsShown
156
157
158 if block:IsShown() then
159 block:ClearAllPoints()
160 if lastBlock then
161 block:SetPoint('TOPLEFT', lastBlock, 'TOPRIGHT')
162 else
163 block:SetPoint('TOPLEFT', self, 'TOPLEFT')
164 end
165 lastBlock = block
166
167 block:SetHeight(24)
168 block:SetWidth(block.Icon:GetWidth() + block.Label:GetWidth()+4)
169 totalWidth = totalWidth + block:GetWidth()
170 end
171 print(block:IsShown(), '|cFF0088FF'..block.name..'|r', block:GetSize())
172
173 end
174
175 self:SetWidth(totalWidth)
176
177 self.needsUpdate = nil
178 print(self:IsShown(), '|cFF00FF88'..self:GetName()..'|r', self:GetSize())
179 self:SetShown(canShow)
180 VeneerWorldState:Reanchor(true)
181 end
182
183 function module:OnUpdate()
184 if self.needsUpdate then
185 self:Update()
186 end
187 end
188
189 function block:OnEvent(event, ...)
190 print('|cFF0088FF<'..self.name..'>|r', 'OnEvent', event, ...)
191 self:Update()
192 end
193
194 function block:Setup()
195
196 end