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