Mercurial > wow > buffalo2
comparison Modules/WorldState.lua @ 88:b107b4df7eb6
- core:DynamicReanchor
- top-down evaluation of clustered frames
- core:InternalReanchor(module)
- bottom-up evaluation of target and frames anchored to it
author | Nenue |
---|---|
date | Thu, 20 Oct 2016 04:08:11 -0400 |
parents | 27db212af783 |
children | 74e714637d6a |
comparison
equal
deleted
inserted
replaced
87:27db212af783 | 88:b107b4df7eb6 |
---|---|
61 | 61 |
62 | 62 |
63 function VeneerWorldStateMixin:OnLoad () | 63 function VeneerWorldStateMixin:OnLoad () |
64 self.modules = {self:GetChildren()} | 64 self.modules = {self:GetChildren()} |
65 print('|cFFFFFF00'..self:GetName()..'|r!') | 65 print('|cFFFFFF00'..self:GetName()..'|r!') |
66 self:RegisterEvent('ARTIFACT_UPDATE') | |
67 self:RegisterEvent('ARTIFACT_XP_UPDATE') | |
68 self:RegisterEvent('PLAYER_ENTERING_WORLD') | 66 self:RegisterEvent('PLAYER_ENTERING_WORLD') |
69 self:RegisterEvent('PLAYER_REGEN_ENABLED') | 67 self:RegisterEvent('PLAYER_REGEN_ENABLED') |
70 self:RegisterEvent('PLAYER_REGEN_DISABLED') | 68 self:RegisterEvent('PLAYER_REGEN_DISABLED') |
71 self:RegisterEvent('ZONE_CHANGED_NEW_AREA') | 69 self:RegisterEvent('ZONE_CHANGED_NEW_AREA') |
72 self:RegisterEvent('ADDON_LOADED') | 70 self:RegisterEvent('ADDON_LOADED') |
78 end | 76 end |
79 end | 77 end |
80 | 78 |
81 function VeneerWorldStateMixin:OnEvent(event, arg) | 79 function VeneerWorldStateMixin:OnEvent(event, arg) |
82 print(event, arg) | 80 print(event, arg) |
83 | 81 if event == 'ZONE_CHANGED_NEW_AREA' or event == 'ADDON_LOADED' then |
84 if event == 'PLAYER_LOGIN' then | |
85 if IsLoggedIn() and not self.initialized then | |
86 self.initialized = true | |
87 self:Setup() | |
88 end | |
89 elseif event == 'ZONE_CHANGED_NEW_AREA' or event == 'ADDON_LOADED' then | |
90 if OrderHallCommandBar then | 82 if OrderHallCommandBar then |
91 self:UnregisterEvent('ZONE_CHANGED_NEW_AREA') | 83 self:UnregisterEvent('ZONE_CHANGED_NEW_AREA') |
92 self:UnregisterEvent('ADDON_LOADED') | 84 self:UnregisterEvent('ADDON_LOADED') |
93 Veneer:AddHandler(VeneerOrderHallHandler, 'TOP', true) | 85 Veneer:AddHandler(VeneerOrderHallHandler, 'TOP', true) |
94 end | 86 end |
99 elseif event == 'PLAYER_REGEN_DISABLED' then | 91 elseif event == 'PLAYER_REGEN_DISABLED' then |
100 self:SetShown(false) | 92 self:SetShown(false) |
101 end | 93 end |
102 end | 94 end |
103 | 95 |
104 function VeneerWorldStateMixin:Update() | 96 function VeneerWorldStateMixin:Update(isBatchUpdate) |
105 print('|cFFFFFF00All:Update()|r') | 97 print('|cFFFFFF00All:Update()|r') |
106 for i, frame in ipairs(self.modules) do | 98 for index, frame in ipairs(self.modules) do |
107 if frame.Update then | 99 if frame.Update then |
108 print(' |cFFFF00FF'.. frame:GetName() .. ':Update()') | 100 print(' '..index..' |cFFFF00FFUpdate:|r '.. frame:GetName()) |
109 frame:Update() | 101 frame:Update(isBatchUpdate) |
102 print(' ', frame:IsVisible(), frame:IsShown()) | |
110 end | 103 end |
111 end | 104 end |
112 end | 105 end |
113 | 106 |
114 function VeneerWorldStateMixin:Reanchor(isUpdate) | 107 function VeneerWorldStateMixin:Reanchor(isUpdate) |
115 print('|cFFFFFF00'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks') | 108 print(' |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks') |
116 self.maxHeight = 0 | 109 self.maxHeight = 0 |
117 for i, frame in ipairs(self.modules) do | 110 for i, frame in ipairs(self.modules) do |
118 print(' '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight()) | 111 print(' '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight()) |
119 if frame:IsShown() then | 112 if frame:IsShown() then |
120 self.maxHeight = max(self.maxHeight, frame:GetHeight()) | 113 self.maxHeight = max(self.maxHeight, frame:GetHeight()) |
139 function VeneerWorldStateMixin:OnMouseDown() | 132 function VeneerWorldStateMixin:OnMouseDown() |
140 end | 133 end |
141 | 134 |
142 function VeneerOrderHallMixin:Setup() | 135 function VeneerOrderHallMixin:Setup() |
143 print('|cFFFFFF00'..self:GetName()..':Setup()') | 136 print('|cFFFFFF00'..self:GetName()..':Setup()') |
144 hooksecurefunc(OrderHallCommandBar,'Show', function() | 137 self:SetParent(OrderHallCommandBar) |
145 self:Update() | 138 self:RegisterEvent("ZONE_CHANGED"); |
146 end) | 139 self:RegisterEvent("ZONE_CHANGED_INDOORS"); |
147 hooksecurefunc(OrderHallCommandBar,'Hide', function() | 140 self:RegisterEvent("ZONE_CHANGED_NEW_AREA"); |
148 self:Update() | 141 self:SetShown(true) |
149 end) | 142 end |
143 | |
144 function VeneerOrderHallMixin:OnEvent(event, ...) | |
145 | |
146 print('|cFF00AAFF'..self:GetName()..'|r:'.. event, ...) | |
147 self:Update() | |
148 end | |
149 | |
150 function VeneerOrderHallMixin:OnShow() | |
151 print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', OrderHallCommandBar:IsShown(), self:IsShown()) | |
152 self:Update() | |
153 Veneer:InternalReanchor(self) | |
154 end | |
155 | |
156 function VeneerOrderHallMixin:OnHide() | |
157 print('|cFF00AAFF'..self:GetName()..'|r:OnHide()', OrderHallCommandBar:IsShown(), self:IsShown()) | |
158 Veneer:Reanchor() | |
150 end | 159 end |
151 | 160 |
152 function VeneerOrderHallMixin:Update() | 161 function VeneerOrderHallMixin:Update() |
153 | 162 |
154 if not OrderHallCommandBar then | 163 if not OrderHallCommandBar then |
155 print('|cFFFF4400'..self:GetName()..' updater called without target') | 164 print('|cFFFF4400'..self:GetName()..' updater called without target') |
156 return | 165 return |
157 end | 166 end |
158 | 167 |
159 print('|cFF0044FF'..self:GetName()..' update') | |
160 OrderHallCommandBar:ClearAllPoints() | 168 OrderHallCommandBar:ClearAllPoints() |
161 OrderHallCommandBar:SetPoint('TOP', self, 'TOP') | 169 OrderHallCommandBar:SetPoint('TOP', UIParent, 'TOP') |
162 OrderHallCommandBar:SetWidth(600) | 170 OrderHallCommandBar:SetWidth(600) |
163 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5) | 171 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5) |
164 OrderHallCommandBar.WorldMapButton:Hide() | 172 OrderHallCommandBar.WorldMapButton:Hide() |
165 OrderHallCommandBar:EnableMouse(false) | 173 OrderHallCommandBar:EnableMouse(false) |
166 | |
167 self:SetSize(OrderHallCommandBar:GetSize()) | 174 self:SetSize(OrderHallCommandBar:GetSize()) |
175 | |
176 print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown()) | |
177 print(debugstack(6)) | |
178 | |
168 end | 179 end |
169 | 180 |
170 function VeneerWorldStateCurrencyMixin:OnLoad () | 181 function VeneerWorldStateCurrencyMixin:OnLoad () |
171 | 182 |
172 self:RegisterEvent("PLAYER_ENTERING_WORLD"); | 183 self:RegisterEvent("PLAYER_ENTERING_WORLD"); |
181 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg) | 192 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg) |
182 self:Update() | 193 self:Update() |
183 end | 194 end |
184 | 195 |
185 | 196 |
186 function VeneerWorldStateCurrencyMixin:Update() | 197 function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate) |
187 | 198 |
188 print(' Zone:', GetZoneText()) | 199 print(' Zone:', GetZoneText()) |
189 if GetZoneText() == 'Suramar' then | 200 if GetZoneText() == 'Suramar' then |
190 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155) | 201 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155) |
191 | 202 |
294 | 305 |
295 self.ProgressFlash.translation:SetOffset(progressWidth, 0) | 306 self.ProgressFlash.translation:SetOffset(progressWidth, 0) |
296 self.ProgressFlash:Play() | 307 self.ProgressFlash:Play() |
297 end | 308 end |
298 | 309 |
299 function VeneerWorldStateProgressMixin:Update() | 310 function VeneerWorldStateProgressMixin:Update(isBatchUpdate) |
300 local hasNewInfo = false | 311 local hasNewInfo = false |
301 local progressChange = false | 312 local progressChange = false |
302 print(' current mode:', self.mode) | 313 print(' current mode:', self.mode) |
303 | 314 |
304 | 315 |
318 else | 329 else |
319 self.ProgressBar:SetColorTexture(0.5,0,1) | 330 self.ProgressBar:SetColorTexture(0.5,0,1) |
320 end | 331 end |
321 hasNewInfo = (self.progressAmount ~= xp) | 332 hasNewInfo = (self.progressAmount ~= xp) |
322 progressChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax) | 333 progressChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax) |
323 self.progressOverflow = bonusXP | 334 self.progressOverflow = bonusXP or 0 |
324 self.progressAmount = xp | 335 self.progressAmount = xp |
325 self.progressMax = xpMax | 336 self.progressMax = xpMax |
326 | 337 |
327 elseif self.mode == 'artifact' then | 338 elseif self.mode == 'artifact' then |
328 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo() | 339 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo() |
329 | 340 |
330 if itemID then | 341 if itemID then |
331 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0 | 342 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0 |
332 print(' C_AUI:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost) | 343 print(' API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost) |
333 hasNewInfo = (self.progressAmount ~= totalXP) | 344 hasNewInfo = (self.progressAmount ~= totalXP) |
334 progressChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost)) | 345 progressChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost)) |
335 | 346 |
336 if totalXP > nextRankCost then | 347 if totalXP > nextRankCost then |
337 self.progressPercent = 1 | 348 self.progressPercent = 1 |
346 | 357 |
347 self.progressOverflow = 0 | 358 self.progressOverflow = 0 |
348 self.progressAmount = totalXP | 359 self.progressAmount = totalXP |
349 self.progressMax = nextRankCost | 360 self.progressMax = nextRankCost |
350 else | 361 else |
362 self.progressOverflow = 0 | |
351 self.progressAmount = 0 | 363 self.progressAmount = 0 |
352 self.progressMax = 1 | 364 self.progressMax = 1 |
353 self.progressText = '' | 365 self.progressText = '' |
354 end | 366 end |
355 end | 367 end |
369 self:ShowPanel() | 381 self:ShowPanel() |
370 end | 382 end |
371 | 383 |
372 end | 384 end |
373 | 385 |
374 print(self:IsVisible()) | 386 |
375 print(self:GetWidth()) | 387 print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown()) |
376 print(self.ProgressBG:GetWidth()) | 388 print(' Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth()) |
377 print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'NewInfo:', hasNewInfo, 'IsShown:', self:IsShown()) | |
378 | |
379 | 389 |
380 if progressChange then | 390 if progressChange then |
381 self:AnimateProgress(progressChange) | 391 self:AnimateProgress(progressChange) |
382 end | 392 end |
383 | 393 |
388 self.Label:SetText(self.progressText) | 398 self.Label:SetText(self.progressText) |
389 | 399 |
390 self.progressLeft = self.progressMax - self.progressAmount | 400 self.progressLeft = self.progressMax - self.progressAmount |
391 if self.progressOverflow >= self.progressLeft then | 401 if self.progressOverflow >= self.progressLeft then |
392 | 402 |
403 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPRIGHT', 0, 0) | |
404 else | |
393 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBar, 'TOPRIGHT', (self.progressOverflow / self.progressMax) * self:GetWidth(), 0) | 405 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBar, 'TOPRIGHT', (self.progressOverflow / self.progressMax) * self:GetWidth(), 0) |
394 else | |
395 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPRIGHT', 0, 0) | |
396 end | 406 end |
397 | 407 |
398 else | 408 else |
399 self.ProgressBar:Hide() | 409 self.ProgressBar:Hide() |
400 end | 410 end |
467 print('|cFF0088FF'..self:GetName()..':OnShow()') | 477 print('|cFF0088FF'..self:GetName()..':OnShow()') |
468 VeneerWorldState:Reanchor() | 478 VeneerWorldState:Reanchor() |
469 end | 479 end |
470 function WorldStateBlockMixin:Setup() | 480 function WorldStateBlockMixin:Setup() |
471 print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop') | 481 print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop') |
482 self:Update() | |
472 end | 483 end |
473 function WorldStateBlockMixin:Reset() | 484 function WorldStateBlockMixin:Reset() |
474 print('|cFF0088FF'..self:GetName()..':Reset()') | 485 print('|cFF0088FF'..self:GetName()..':Reset()') |
475 self.keepOpen = true | 486 self.keepOpen = true |
476 self:Setup() | 487 self:Setup() |