Mercurial > wow > worldplan
comparison WorldQuests.lua @ 65:02f1d3bce558
Update for Legion Patch 7.2
- Massively improved performance footprint via 7.2 API changes and some major optimization of POI update triggers
- Removed AP token caching until reliable mechanisms for detecting AK shifts can be resolved.
| author | Nenue |
|---|---|
| date | Wed, 29 Mar 2017 13:45:41 -0400 |
| parents | 876c3f0bfd0e |
| children | e43e10c5576b |
comparison
equal
deleted
inserted
replaced
| 64:876c3f0bfd0e | 65:02f1d3bce558 |
|---|---|
| 33 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER | 33 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER |
| 34 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT | 34 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT |
| 35 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES | 35 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES |
| 36 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS | 36 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS |
| 37 | 37 |
| 38 | 38 local numShown = 0 |
| 39 local numLoaded = 0 | |
| 40 local isDataLoaded | |
| 39 local numPins = 0 | 41 local numPins = 0 |
| 40 local NumPinFrames = 1 | 42 local NumPinFrames = 1 |
| 41 Module.TasksByID = {} | 43 Module.TasksByID = {} |
| 42 | 44 |
| 43 --%debug% | 45 --%debug% |
| 70 hooksecurefunc("WorldMapScrollFrame_ReanchorQuestPOIs", InternalDoRefresh) | 72 hooksecurefunc("WorldMapScrollFrame_ReanchorQuestPOIs", InternalDoRefresh) |
| 71 hooksecurefunc("WorldMap_UpdateQuestBonusObjectives", function () self:OnUpdateQuestBonusObjectives() end) | 73 hooksecurefunc("WorldMap_UpdateQuestBonusObjectives", function () self:OnUpdateQuestBonusObjectives() end) |
| 72 hooksecurefunc("WorldMapFrame_UpdateMap", InternalDoRefresh) | 74 hooksecurefunc("WorldMapFrame_UpdateMap", InternalDoRefresh) |
| 73 WorldMapFrame.UIElementsFrame.BountyBoard:SetSelectedBountyChangedCallback(InternalDoRefresh); | 75 WorldMapFrame.UIElementsFrame.BountyBoard:SetSelectedBountyChangedCallback(InternalDoRefresh); |
| 74 WorldMapFrame.UIElementsFrame.ActionButton:SetOnCastChangedCallback(InternalDoRefresh); | 76 WorldMapFrame.UIElementsFrame.ActionButton:SetOnCastChangedCallback(InternalDoRefresh); |
| 77 | |
| 78 self.Status = CreateFrame('Frame', nil, self) | |
| 79 self.Status:SetPoint('TOPLEFT', WorldMapPOIFrame, 'TOPLEFT', 0, 0) | |
| 80 self.Status:SetPoint('BOTTOMRIGHT', WorldMapPOIFrame, 'TOPRIGHT', 0, -4) | |
| 81 self.Status.t = self.Status:CreateTexture(nil, 'OVERLAY') | |
| 82 self.Status.b = self.Status:CreateTexture(nil, 'BACKGROUND') | |
| 83 self.Status.b:SetColorTexture(0,0,0,.25) | |
| 84 self.Status.b:SetAllPoints(self.Status) | |
| 85 self.Status.t:SetColorTexture(1,1,1,.5) | |
| 86 self.Status.t:SetPoint('TOP') | |
| 87 self.Status.t:SetPoint('BOTTOM') | |
| 88 self.Status.t:SetPoint('LEFT') | |
| 89 local translationEnd, translationStart | |
| 90 self.Status:SetScript('OnUpdate', function(status) | |
| 91 local translateTo | |
| 92 if numLoaded < numShown then | |
| 93 translateTo = numLoaded/numShown * status:GetWidth() | |
| 94 status.t:SetWidth(translateTo) | |
| 95 else | |
| 96 translateTo = numShown * status:GetWidth() | |
| 97 status.t:SetWidth(translateTo) | |
| 98 end | |
| 99 | |
| 100 | |
| 101 end) | |
| 75 end | 102 end |
| 76 | 103 |
| 77 function Module:OnConfigUpdate() | 104 function Module:OnConfigUpdate() |
| 78 if db.Config.FadeWhileGrouped then | 105 if db.Config.FadeWhileGrouped then |
| 79 db.PinAlpha = 0.15 | 106 db.PinAlpha = 0.15 |
| 158 self:Refresh(true) | 185 self:Refresh(true) |
| 159 else | 186 else |
| 160 self.isStale = true | 187 self.isStale = true |
| 161 end | 188 end |
| 162 end | 189 end |
| 163 | 190 local superTrackedQuestID |
| 164 function Module:OnEvent (event, ...) | 191 function Module:OnEvent (event, ...) |
| 165 | 192 |
| 166 print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...) | 193 print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...) |
| 167 if (event == 'QUEST_LOG_UPDATE') or (event == 'SUPER_TRACKED_QUEST_CHANGED') then | 194 if (event == 'QUEST_LOG_UPDATE') or (event == 'SUPER_TRACKED_QUEST_CHANGED') then |
| 168 local questID, added = ... | 195 local questID, added = ... |
| 179 local questID = ... | 206 local questID = ... |
| 180 if questID and db.QuestsByID[questID] then | 207 if questID and db.QuestsByID[questID] then |
| 181 self:ReleasePin(db.QuestsByID[questID]) | 208 self:ReleasePin(db.QuestsByID[questID]) |
| 182 rprint('|cFFFF4400release|r', questID) | 209 rprint('|cFFFF4400release|r', questID) |
| 183 end | 210 end |
| 184 elseif event == 'SKILL_LINES_CHANGED' then | 211 elseif event == 'SKILL_LINES_CHANGED' or event == 'CURRENT_SPELL_CAST_CHANGED' then |
| 185 self:Refresh() | |
| 186 elseif event == 'CURRENT_SPELL_CAST_CHANGED' then | |
| 187 | |
| 188 self:Refresh() | 212 self:Refresh() |
| 189 elseif event == 'ARTIFACT_UPDATE' then | 213 elseif event == 'ARTIFACT_UPDATE' then |
| 190 local ak = C_ArtifactUI.GetArtifactKnowledgeMultiplier() | 214 local ak = C_ArtifactUI.GetArtifactKnowledgeMultiplier() |
| 191 if ak and (ak ~= self.akLevel) then | 215 if ak and (ak ~= self.akLevel) then |
| 192 print('push artifact knowledge update', self.akLevel, 'to', ak) | 216 print('push artifact knowledge update', self.akLevel, 'to', ak) |
| 193 self.akLevel = ak | 217 self.akLevel = ak |
| 194 for index, pin in pairs( db.QuestsByID) do | 218 for index, pin in pairs( db.QuestsByID) do |
| 195 pin.dataLoaded = nil | 219 pin.dataLoaded = nil |
| 196 end | 220 end |
| 197 self:Refresh() | 221 self:Refresh() |
| 222 end | |
| 223 elseif event == 'SUPER_TRACKED_QUEST_CHANGED' then | |
| 224 if superTrackedQuestID and db.QuestsByID[superTrackedQuestID] then | |
| 225 db.QuestsByID[superTrackedQuestID].isStale = true | |
| 226 end | |
| 227 local newID = GetSuperTrackedQuestID() | |
| 228 if newID and db.QuestsByID[newID] then | |
| 229 db.QuestsByID[newID].isStale = true | |
| 198 end | 230 end |
| 199 end | 231 end |
| 200 end | 232 end |
| 201 | 233 |
| 202 local totalPins = 0 | 234 local totalPins = 0 |
| 251 rprint('|cFFFF4400coords|r', info.x, info.y) | 283 rprint('|cFFFF4400coords|r', info.x, info.y) |
| 252 end | 284 end |
| 253 end | 285 end |
| 254 | 286 |
| 255 if (not pin.dataLoaded) then | 287 if (not pin.dataLoaded) then |
| 256 pin:GetData() | 288 local dataLoaded = pin:GetData() |
| 289 isDataLoaded = (isDataLoaded and dataLoaded) | |
| 257 WorldPlan.dataFlush = true | 290 WorldPlan.dataFlush = true |
| 258 end | 291 end |
| 259 | 292 |
| 260 pin.isActive = TQ_IsActive(questID) | 293 pin.isActive = TQ_IsActive(questID) |
| 261 | 294 |
| 262 pin:CheckFilterRules() | 295 pin:CheckFilterRules() |
| 263 pin.isStale = true | |
| 264 rprint(pin:GetID(), pin.filtered, pin.used) | 296 rprint(pin:GetID(), pin.filtered, pin.used) |
| 265 | 297 |
| 266 return pin | 298 return pin |
| 267 end | 299 end |
| 268 | 300 |
| 473 end | 505 end |
| 474 | 506 |
| 475 print('|cFFFFFF00'..self:GetName()..':Cleanup()|r') | 507 print('|cFFFFFF00'..self:GetName()..':Cleanup()|r') |
| 476 rprint('|cFFFFFF00'..self:GetName()..':Cleanup()|r') | 508 rprint('|cFFFFFF00'..self:GetName()..':Cleanup()|r') |
| 477 --local showQuestPOI = db.Config.EnablePins | 509 --local showQuestPOI = db.Config.EnablePins |
| 510 numShown = 0 | |
| 511 numLoaded = 0 | |
| 478 for questID, pin in pairs(db.QuestsByID) do | 512 for questID, pin in pairs(db.QuestsByID) do |
| 479 local oV = pin:IsShown() | 513 local oV = pin:IsShown() |
| 480 if pin.used then | 514 if pin.used then |
| 481 pin.throttle = 1 | 515 pin.throttle = 1 |
| 482 if oV == false then | 516 if oV == false then |
| 483 print('|cFF00FF00cleanup +|r', questID, pin.title) | 517 print('|cFF00FF00cleanup +|r', questID, pin.title) |
| 484 end | 518 end |
| 485 pin:SetShown(true) | 519 pin:SetShown(true) |
| 520 numShown = numShown + 1 | |
| 521 if pin.dataLoaded then | |
| 522 numLoaded = numLoaded + 1 | |
| 523 end | |
| 524 | |
| 486 else | 525 else |
| 487 if oV == true then | 526 if oV == true then |
| 488 print('|cFFFF4400 -|r', questID, pin.title) | 527 print('|cFFFF4400 -|r', questID, pin.title) |
| 489 end | 528 end |
| 490 pin:HideFrames() | 529 pin:HideFrames() |
| 491 end | 530 end |
| 492 end | 531 end |
| 532 | |
| 533 if numShown > numLoaded then | |
| 534 self.Status:Show() | |
| 535 end | |
| 536 | |
| 493 | 537 |
| 494 self.isStale = nil | 538 self.isStale = nil |
| 495 self.sizesDirty = nil | 539 self.sizesDirty = nil |
| 496 end | 540 end |
| 497 | 541 |
| 515 | 559 |
| 516 print('~ ', pin.mapID, pin.questID, pin.title) | 560 print('~ ', pin.mapID, pin.questID, pin.title) |
| 517 rprint('|cFF00FF00update|r', pin.questID, pin.title) | 561 rprint('|cFF00FF00update|r', pin.questID, pin.title) |
| 518 | 562 |
| 519 if x and y then | 563 if x and y then |
| 520 pin.x = x | |
| 521 pin.y = y | |
| 522 pin:SetFrameLevel(PinBaseIndex+pin:GetID()) | 564 pin:SetFrameLevel(PinBaseIndex+pin:GetID()) |
| 523 pin.owningFrame = WorldMapFrame | 565 pin.owningFrame = WorldMapFrame |
| 524 pin:SetAnchor(WorldMapPOIFrame, pin.x, pin.y, self.hostWidth, self.hostHeight) | 566 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight) |
| 525 --tinsert(self.UsedPositions, pin) | 567 --tinsert(self.UsedPositions, pin) |
| 526 end | 568 end |
| 527 if self:IsVisible() then | 569 if self:IsVisible() and pin.isStale then |
| 528 pin:Refresh() | 570 pin:Refresh() |
| 529 else | |
| 530 pin.isStale = true | |
| 531 end | 571 end |
| 532 if mapID then | 572 if mapID then |
| 533 if not db.QuestsByZone[mapID] then | 573 if not db.QuestsByZone[mapID] then |
| 534 db.QuestsByZone[mapID] = {} | 574 db.QuestsByZone[mapID] = {} |
| 535 end | 575 end |
| 543 self:UpdateQuestButton(info, mapID) | 583 self:UpdateQuestButton(info, mapID) |
| 544 end | 584 end |
| 545 end | 585 end |
| 546 | 586 |
| 547 function Module:UpdateAnchors () | 587 function Module:UpdateAnchors () |
| 588 | |
| 548 wipe(self.UsedPositions) | 589 wipe(self.UsedPositions) |
| 549 print(' |cFF00FF00'..self:GetName()..':UpdateAnchors()') | 590 print(' |cFF00FF00'..self:GetName()..':UpdateAnchors()') |
| 550 self.hostWidth, self.hostHeight = WorldMapPOIFrame:GetSize() | 591 self.hostWidth, self.hostHeight = WorldMapPOIFrame:GetSize() |
| 551 self.nudgeThrescholdX = 16/self.hostWidth | 592 self.nudgeThrescholdX = 16/self.hostWidth |
| 552 self.nudgeThrescholdY = 16/self.hostHeight | 593 self.nudgeThrescholdY = 16/self.hostHeight |
| 554 print('|cFF00FF00'..self:GetName()..':UpdateAnchors()') | 595 print('|cFF00FF00'..self:GetName()..':UpdateAnchors()') |
| 555 local mapFileName, textureHeight, textureWidth, isMicroDungeon, microDungeonMapName = GetMapInfo() | 596 local mapFileName, textureHeight, textureWidth, isMicroDungeon, microDungeonMapName = GetMapInfo() |
| 556 if isMicroDungeon then | 597 if isMicroDungeon then |
| 557 return | 598 return |
| 558 end | 599 end |
| 559 | 600 -- starts as true |
| 601 isDataLoaded = true | |
| 560 | 602 |
| 561 numPins = 0 | 603 numPins = 0 |
| 562 local taskInfo = TQ_GetQuestsForPlayerByMapID(self.currentMapID) | 604 local taskInfo = TQ_GetQuestsForPlayerByMapID(self.currentMapID) |
| 563 if taskInfo then | 605 if taskInfo then |
| 564 self:UpdateMap(taskInfo, self.currentMapID) | 606 self:UpdateMap(taskInfo, self.currentMapID) |
| 573 end | 615 end |
| 574 end | 616 end |
| 575 end | 617 end |
| 576 end | 618 end |
| 577 | 619 |
| 578 |
