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()