Mercurial > wow > buffalo2
comparison Modules/Currency.lua @ 125:3f4794dca91b
template load order and Script handlers linkage
| author | Nenue |
|---|---|
| date | Sun, 15 Oct 2017 16:47:22 -0400 |
| parents | b3c0258b419d |
| children | 3de635cda288 |
comparison
equal
deleted
inserted
replaced
| 124:07fe8fae8ca8 | 125:3f4794dca91b |
|---|---|
| 4 -- Date: 3/25/2017 | 4 -- Date: 3/25/2017 |
| 5 -- Time: 7:07 PM | 5 -- Time: 7:07 PM |
| 6 -- To change this template use File | Settings | File Templates. | 6 -- To change this template use File | Settings | File Templates. |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop | 9 local print = DEVIAN_WORKSPACE and function(...) print('Currency', ...) end or nop |
| 10 local profileUpdate, needsUpdate | 10 local profileUpdate, needsUpdate |
| 11 | 11 |
| 12 | 12 |
| 13 local itemBlock = {} | 13 local itemBlock = {} |
| 14 local currencyBlock = {} | 14 local currencyBlock = {} |
| 28 ["Ancient Mana"] = { | 28 ["Ancient Mana"] = { |
| 29 currencyID = 1155, | 29 currencyID = 1155, |
| 30 showMax = true, | 30 showMax = true, |
| 31 zones = { | 31 zones = { |
| 32 ['Suramar'] = true, | 32 ['Suramar'] = true, |
| 33 ["Sashj'tar Ruins"] = true, | |
| 34 ["Faronaar Ruins"] = true, | |
| 35 ["Halls of the Eclipse"] = true, | |
| 36 ["Shal'aran"] = true, | |
| 37 ["The Fel Breach"] = true, | |
| 38 }, | 33 }, |
| 39 }, | 34 }, |
| 40 ["Blood of Sargeras"] = { | 35 ["Blood of Sargeras"] = { |
| 41 itemID = 124124, | 36 itemID = 124124, |
| 42 }, | 37 }, |
| 43 ["Legionfall War Supplies"] = { | 38 ["Legionfall War Supplies"] = { |
| 44 currencyID = 1342, | 39 currencyID = 1342, |
| 40 zones = { | |
| 41 ["The Broken Shore"] = true | |
| 42 } | |
| 45 }, | 43 }, |
| 46 ["Nethershard"] = { | 44 ["Nethershard"] = { |
| 47 currencyID = 1226, | 45 currencyID = 1226, |
| 46 zones = { | |
| 47 ["The Broken Shore"] = true | |
| 48 } | |
| 48 }, | 49 }, |
| 49 ["Veiled Argunite"] = { | 50 ["Veiled Argunite"] = { |
| 50 currencyID = 1508, | 51 currencyID = 1508, |
| 51 }, | 52 zones = { |
| 52 ["Argus Waystone"] = { | 53 ["Antoran Wastes"] = true, |
| 53 currencyID = 1506, | 54 ["Krokuun"] = true, |
| 54 } | 55 ["MacAree"] = true, |
| 56 } | |
| 57 }, | |
| 55 } | 58 } |
| 56 local items, currencies = {}, {} | 59 local items, currencies = {}, {} |
| 57 | 60 |
| 58 | 61 |
| 59 VeneerCurrencyMixin = { | 62 VeneerCurrencyMixin = { |
| 75 print('|cFFFF0088'..(frame.name or frame:GetName())..'|r', 'listening to', event) | 78 print('|cFFFF0088'..(frame.name or frame:GetName())..'|r', 'listening to', event) |
| 76 frame:RegisterEvent(event) | 79 frame:RegisterEvent(event) |
| 77 end | 80 end |
| 78 end | 81 end |
| 79 | 82 |
| 83 function module:Setup() | |
| 84 self:Update() | |
| 85 end | |
| 86 | |
| 80 function module:OnLoad () | 87 function module:OnLoad () |
| 81 Veneer:AddHandler(self) | 88 Veneer:AddHandler(self) |
| 82 | 89 |
| 83 for name, info in pairs(blocks) do | 90 for name, info in pairs(blocks) do |
| 84 local frame = CreateFrame('Frame', nil, self, 'VeneerCurrencyTemplate') | 91 local block = CreateFrame('Frame', nil, self, 'VeneerCurrencyTemplate') |
| 85 frame.name = name | 92 block.name = name |
| 86 for k,v in pairs(info) do | 93 for k,v in pairs(info) do |
| 87 print(name, k, '=', v) | 94 print(name, k, '=', v) |
| 88 frame[k] = v | 95 block[k] = v |
| 89 end | 96 end |
| 90 | 97 |
| 91 frame.debug = function(...) | 98 block.debug = function(...) |
| 92 print('|cFF0088FF<'..frame.name..'>|r', ...) | 99 print('|cFF0088FF<'..block.name..'>|r', ...) |
| 93 end | 100 end |
| 94 frame.id = info.itemID or info.currencyID | 101 block.id = info.itemID or info.currencyID |
| 95 | 102 |
| 96 | 103 |
| 97 if info.itemID then | 104 if info.itemID then |
| 98 local itemID = info.itemID | 105 local itemID = info.itemID |
| 99 items[itemID] = { | 106 items[itemID] = { |
| 100 count = 0, | 107 count = 0, |
| 101 frame = frame | 108 frame = block |
| 102 } | 109 } |
| 103 frame.Update = itemBlock.Update | 110 block.Update = itemBlock.Update |
| 104 RegisterEvents(self, itemEvents) | 111 RegisterEvents(self, itemEvents) |
| 105 elseif info.currencyID then | 112 elseif info.currencyID then |
| 106 local currencyID = info.currencyID | 113 local currencyID = info.currencyID |
| 107 frame.Update = currencyBlock.Update | 114 block.Update = currencyBlock.Update |
| 108 RegisterEvents(frame, currencyEvents) | 115 RegisterEvents(block, currencyEvents) |
| 109 end | 116 end |
| 110 | 117 |
| 111 | 118 |
| 112 | 119 |
| 113 if info.zones then | 120 if info.zones then |
| 114 RegisterEvents(frame, zoneEvents) | 121 RegisterEvents(block, zoneEvents) |
| 115 local zones = info.zones | 122 local zones = info.zones |
| 116 local of = frame.Update | 123 local of = block.Update |
| 117 frame.Update = function(block) | 124 function block:Update(zone, subZone) |
| 118 frame.debug('Update [Zone]') | 125 block.debug('Update [Zone]', zone, subZone) |
| 119 local zone = self.zoneText | 126 local canShow = ((zone and self.zones[zone]) or (subZone and self.zones[subZone])) and true or false |
| 120 local canShow = (zone and block.zones[zone]) and true or false | |
| 121 if of then | 127 if of then |
| 122 canShow = canShow and of(frame) | 128 canShow = canShow and of(self) |
| 123 end | 129 end |
| 124 return canShow | 130 return canShow |
| 125 end | 131 end |
| 126 end | 132 end |
| 127 end | 133 end |
| 142 | 148 |
| 143 | 149 |
| 144 for itemID in pairs(items) do | 150 for itemID in pairs(items) do |
| 145 items[itemID].count = 0 | 151 items[itemID].count = 0 |
| 146 end | 152 end |
| 147 self.zoneText = GetRealZoneText() | 153 self.realZoneText = GetRealZoneText() |
| 154 self.subZoneText = GetSubZoneText() | |
| 148 local canShow = false | 155 local canShow = false |
| 149 | 156 |
| 150 for i = 0, NUM_BAG_SLOTS do | 157 for i = 0, NUM_BAG_SLOTS do |
| 151 local numSlots = GetContainerNumSlots(i) | 158 local numSlots = GetContainerNumSlots(i) |
| 152 for j = 1, numSlots do | 159 for j = 1, numSlots do |
| 166 | 173 |
| 167 | 174 |
| 168 local lastBlock | 175 local lastBlock |
| 169 local totalWidth = 0 | 176 local totalWidth = 0 |
| 170 for _, block in ipairs(self.Blocks) do | 177 for _, block in ipairs(self.Blocks) do |
| 171 local blockIsShown = block:Update() or false | 178 local blockIsShown = block:Update(self.realZoneText, self.subZoneText) or false |
| 172 block:SetShown(blockIsShown) | 179 block:SetShown(blockIsShown) |
| 173 canShow = canShow or blockIsShown | 180 canShow = canShow or blockIsShown |
| 174 | 181 |
| 175 | 182 |
| 176 if block:IsShown() then | 183 if blockIsShown then |
| 177 block:ClearAllPoints() | 184 block:ClearAllPoints() |
| 178 if lastBlock then | 185 if lastBlock then |
| 179 block:SetPoint('TOPLEFT', lastBlock, 'TOPRIGHT') | 186 block:SetPoint('TOPLEFT', lastBlock, 'TOPRIGHT') |
| 180 else | 187 else |
| 181 block:SetPoint('TOPLEFT', self, 'TOPLEFT') | 188 block:SetPoint('TOPLEFT', self, 'TOPLEFT') |
| 210 end | 217 end |
| 211 end | 218 end |
| 212 | 219 |
| 213 function module:OnUpdate() | 220 function module:OnUpdate() |
| 214 if needsUpdate then | 221 if needsUpdate then |
| 215 self:Update() | 222 self:Update(GetRealZoneText(), GetSubZoneText()) |
| 216 elseif profileUpdate then | 223 elseif profileUpdate then |
| 217 self:UpdateProfile() | 224 self:UpdateProfile() |
| 218 end | 225 end |
| 219 | 226 |
| 220 end | 227 end |
| 236 end | 243 end |
| 237 end | 244 end |
| 238 | 245 |
| 239 function block:OnEvent(event, ...) | 246 function block:OnEvent(event, ...) |
| 240 print('|cFF0088FF<'..self.name..'>|r', 'OnEvent', event, ...) | 247 print('|cFF0088FF<'..self.name..'>|r', 'OnEvent', event, ...) |
| 241 self:Update() | 248 |
| 249 self:Update(GetRealZoneText(), GetSubZoneText()) | |
| 242 end | 250 end |
| 243 | 251 |
| 244 function block:Setup() | 252 function block:Setup() |
| 245 | 253 |
| 246 end | 254 end |
| 247 function itemBlock:Update() | 255 function itemBlock:Update(zone, subZone) |
| 248 self.debug('Update [Item]') | 256 self.debug('Update [Item]', zone, subZone) |
| 249 if items[self.itemID].count >= 1 then | 257 if items[self.itemID].count >= 1 then |
| 250 self.Icon:SetTexture(GetItemIcon(self.id)) | 258 self.Icon:SetTexture(GetItemIcon(self.id)) |
| 251 self.Label:SetFormattedText("%d", items[self.id].count) | 259 self.Label:SetFormattedText("%d", items[self.id].count) |
| 252 return true | 260 return true |
| 253 end | 261 end |
| 254 end | 262 return false |
| 255 | 263 end |
| 256 function currencyBlock:Update() | 264 |
| 257 self.debug('Update [Currency]') | 265 function currencyBlock:Update(zone, subZone) |
| 266 self.debug('Update [Currency]', zone, subZone) | |
| 258 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(self.id) | 267 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(self.id) |
| 259 | 268 |
| 260 self.Icon:SetTexture(texture) | 269 self.Icon:SetTexture(texture) |
| 261 if self.showMax then | 270 if self.showMax then |
| 262 self.Label:SetFormattedText("%d / %d", earned, totalMax) | 271 self.Label:SetFormattedText("%d / %d", earned, totalMax) |
