Mercurial > wow > buffalo2
comparison Modules/Currency.lua @ 115:8c94bee4fdfc
- AddHandler simplified
- Centralized combat start/stop hooks
- WorldState removed
| author | Nenue |
|---|---|
| date | Tue, 28 Mar 2017 07:02:26 -0400 |
| parents | 6748c98a6c6c |
| children | ddfe19d70a34 |
comparison
equal
deleted
inserted
replaced
| 114:6748c98a6c6c | 115:8c94bee4fdfc |
|---|---|
| 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('VnWorldState', ...) end or nop |
| 10 local profileUpdate, needsUpdate | |
| 10 | 11 |
| 11 local zoneEvents = { | 12 local zoneEvents = { |
| 12 "ZONE_CHANGED_NEW_AREA", "ZONE_CHANGED_INDOORS", "ZONE_CHANGED" | 13 "ZONE_CHANGED_NEW_AREA", "ZONE_CHANGED_INDOORS", "ZONE_CHANGED" |
| 13 } | 14 } |
| 14 local currencyEvents = { | 15 local currencyEvents = { |
| 29 }, | 30 }, |
| 30 ["Blood of Sargeras"] = { | 31 ["Blood of Sargeras"] = { |
| 31 itemID = 124124, | 32 itemID = 124124, |
| 32 } | 33 } |
| 33 } | 34 } |
| 34 local items = {} | 35 local items, currencies = {}, {} |
| 35 | 36 |
| 36 | 37 |
| 37 VeneerWorldStateCurrencyMixin = { Blocks = {} } | 38 VeneerCurrencyMixin = { |
| 38 VeneerWorldStateCurrencyBlockMixin = {} | 39 Blocks = {}, |
| 39 local module = VeneerWorldStateCurrencyMixin | 40 HideCombat = true, |
| 40 local block = VeneerWorldStateCurrencyBlockMixin | 41 EventList = {'PLAYER_ENTERING_WORLD'}, |
| 42 moduleName = 'Currency Watch', | |
| 43 anchorPoint = 'TOP', | |
| 44 } | |
| 45 VeneerCurrencyBlockMixin = {} | |
| 46 local module = VeneerCurrencyMixin | |
| 47 local block = VeneerCurrencyBlockMixin | |
| 41 | 48 |
| 42 | 49 |
| 43 | 50 |
| 44 local function RegisterEvents (frame, events) | 51 local function RegisterEvents (frame, events) |
| 45 for _, event in ipairs(events) do | 52 for _, event in ipairs(events) do |
| 47 frame:RegisterEvent(event) | 54 frame:RegisterEvent(event) |
| 48 end | 55 end |
| 49 end | 56 end |
| 50 | 57 |
| 51 function module:OnLoad () | 58 function module:OnLoad () |
| 52 self:RegisterEvent("PLAYER_ENTERING_WORLD"); | 59 Veneer:AddHandler(self) |
| 53 self:RegisterEvent('PLAYER_REGEN_ENABLED') | |
| 54 self:RegisterEvent('PLAYER_REGEN_DISABLED') | |
| 55 | 60 |
| 56 for name, info in pairs(blocks) do | 61 for name, info in pairs(blocks) do |
| 57 local frame = CreateFrame('Frame', nil, self, 'VeneerCurrencyTemplate') | 62 local frame = CreateFrame('Frame', nil, self, 'VeneerCurrencyTemplate') |
| 58 frame.name = name | 63 frame.name = name |
| 59 for k,v in pairs(info) do | 64 for k,v in pairs(info) do |
| 136 for j = 1, numSlots do | 141 for j = 1, numSlots do |
| 137 local itemID = GetContainerItemID(i, j) | 142 local itemID = GetContainerItemID(i, j) |
| 138 local texture, count = GetContainerItemInfo(i,j) | 143 local texture, count = GetContainerItemInfo(i,j) |
| 139 if items[itemID] then | 144 if items[itemID] then |
| 140 items[itemID].count = items[itemID].count + (count or 1) | 145 items[itemID].count = items[itemID].count + (count or 1) |
| 141 items[itemID].texture = texture | 146 if not items[itemID].texture then |
| 142 print('tracked currency tally', items[itemID].count, '|T'..texture..':16:16|t') | 147 items[itemID].texture = texture |
| 143 items[itemID].frame.Icon:SetTexture(texture) | 148 print('tracked currency tally', items[itemID].count, '|T'..texture..':16:16|t') |
| 144 end | 149 items[itemID].frame.Icon:SetTexture(texture) |
| 145 end | 150 end |
| 146 end | 151 end |
| 147 | 152 end |
| 148 for itemID, info in pairs(items) do | 153 end |
| 149 end | 154 |
| 155 | |
| 150 | 156 |
| 151 local lastBlock | 157 local lastBlock |
| 152 local totalWidth = 0 | 158 local totalWidth = 0 |
| 153 for _, block in ipairs(self.Blocks) do | 159 for _, block in ipairs(self.Blocks) do |
| 154 local blockIsShown = block:Update() or false | 160 local blockIsShown = block:Update() or false |
| 168 block:SetHeight(24) | 174 block:SetHeight(24) |
| 169 block:SetWidth(block.Icon:GetWidth() + block.Label:GetWidth()+4) | 175 block:SetWidth(block.Icon:GetWidth() + block.Label:GetWidth()+4) |
| 170 totalWidth = totalWidth + block:GetWidth() | 176 totalWidth = totalWidth + block:GetWidth() |
| 171 end | 177 end |
| 172 print(block:IsShown(), '|cFF0088FF'..block.name..'|r', block:GetSize()) | 178 print(block:IsShown(), '|cFF0088FF'..block.name..'|r', block:GetSize()) |
| 173 | 179 end |
| 174 end | 180 |
| 175 | 181 self:UpdateProfile() |
| 176 self:SetWidth(totalWidth) | 182 self:SetWidth(totalWidth) |
| 177 | 183 |
| 178 self.needsUpdate = nil | 184 needsUpdate = nil |
| 179 print(self:IsShown(), '|cFF00FF88'..self:GetName()..'|r', self:GetSize()) | 185 print(self:IsShown(), '|cFF00FF88'..self:GetName()..'|r', self:GetSize()) |
| 180 self:SetShown(canShow) | 186 self:SetShown(canShow) |
| 181 VeneerWorldState:Reanchor(true) | 187 Veneer:DynamicReanchor() |
| 188 end | |
| 189 | |
| 190 function module:UpdateProfile() | |
| 191 if not self.profile then | |
| 192 profileUpdate = true | |
| 193 return | |
| 194 end | |
| 195 | |
| 196 for itemID, info in pairs(items) do | |
| 197 self.profile.Items = self.profile.Items or {} | |
| 198 self.profile.Items[itemID] = info | |
| 199 end | |
| 182 end | 200 end |
| 183 | 201 |
| 184 function module:OnUpdate() | 202 function module:OnUpdate() |
| 185 if self.needsUpdate then | 203 if needsUpdate then |
| 186 self:Update() | 204 self:Update() |
| 187 end | 205 elseif profileUpdate then |
| 206 self:UpdateProfile() | |
| 207 end | |
| 208 | |
| 188 end | 209 end |
| 189 | 210 |
| 190 function block:OnEnter() | 211 function block:OnEnter() |
| 191 if not InCombatLockdown() then | 212 if not InCombatLockdown() then |
| 192 GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT"); | 213 GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT"); |
