Mercurial > wow > worldplan
comparison QuestPOI.lua @ 67:96183f981acb
Update for Legion Patch 7.2
- Pins for quests detected from the flight map should properly update as needed.
- Fixed dropdown menu configurations not getting applied.
- Added a toggle button to the world map display that performs the same function as the 'Enable' option in the dropdown menu.
- Rewrote the majority of display update handlers for a significant performance improvements while interacting with the world map.
- AP token info should now reflect artifact knowledge changes.
| author | Nenue |
|---|---|
| date | Sat, 01 Apr 2017 08:17:30 -0400 |
| parents | e43e10c5576b |
| children | 31de7e9e7849 |
comparison
equal
deleted
inserted
replaced
| 66:e43e10c5576b | 67:96183f981acb |
|---|---|
| 29 local pairs, ipairs, tinsert, unpack, select = pairs, ipairs, tinsert, unpack, select | 29 local pairs, ipairs, tinsert, unpack, select = pairs, ipairs, tinsert, unpack, select |
| 30 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID | 30 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID |
| 31 local GameTooltip = GameTooltip | 31 local GameTooltip = GameTooltip |
| 32 local GetItemIcon = GetItemIcon | 32 local GetItemIcon = GetItemIcon |
| 33 | 33 |
| 34 local print = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end | 34 local print = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop |
| 35 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end | 35 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop |
| 36 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end | 36 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or nop |
| 37 local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or function() end | 37 local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or nop |
| 38 local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or function() end | 38 local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or nop |
| 39 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or function() end | 39 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or nop |
| 40 local dprint = DEVIAN_WORKSPACE and function(...) _G.print('WQData', ...) end or function() end | 40 local dprint = DEVIAN_WORKSPACE and function(...) _G.print('WQData', ...) end or nop |
| 41 local QuestPOI = WorldPlanPOIMixin | 41 local QuestPOI = WorldPlanPOIMixin |
| 42 | 42 |
| 43 local pinBaseIndex = 1300 | 43 local pinBaseIndex = 1300 |
| 44 local overlayBaseIndex = 1350 | 44 local overlayBaseIndex = 1350 |
| 45 local previousHighlight | 45 local previousHighlight |
| 46 | 46 |
| 47 local DATA_DEBUG = false | |
| 47 local PIN_REFRESH_DELAY = .5 | 48 local PIN_REFRESH_DELAY = .5 |
| 48 local PIN_REQUEST_DELAY = .1 | 49 local PIN_REQUEST_DELAY = .1 |
| 49 local ICON_UNKNOWN = "Interface\\ICONS\\inv_misc_questionmark" | 50 local ICON_UNKNOWN = "Interface\\ICONS\\inv_misc_questionmark" |
| 50 local ICON_MONEY = "Interface\\Buttons\\UI-GroupLoot-Coin-Up" | 51 local ICON_MONEY = "Interface\\Buttons\\UI-GroupLoot-Coin-Up" |
| 51 | 52 |
| 88 numberFontObject = 'WorldPlanFont' | 89 numberFontObject = 'WorldPlanFont' |
| 89 } | 90 } |
| 90 local MINIMIZED_STYLE = { | 91 local MINIMIZED_STYLE = { |
| 91 hideNumber = true, | 92 hideNumber = true, |
| 92 hideIcon = true, | 93 hideIcon = true, |
| 94 iconWidth = 3, | |
| 93 } | 95 } |
| 94 local REWARD_TYPE_STYLES = { | 96 local REWARD_TYPE_STYLES = { |
| 95 [REWARD_CASH] = { | 97 [REWARD_CASH] = { |
| 96 border = {1,1,0}, | 98 border = {1,1,0}, |
| 97 hideNumber = true, | 99 hideNumber = true, |
| 374 self.dataLoaded = true | 376 self.dataLoaded = true |
| 375 self.isStale = true | 377 self.isStale = true |
| 376 end | 378 end |
| 377 end | 379 end |
| 378 | 380 |
| 379 self.isCriteria = WorldMapFrame.UIElementsFrame.BountyBoard:IsWorldQuestCriteriaForSelectedBounty(questID) | |
| 380 | 381 |
| 381 return self.dataLoaded | 382 return self.dataLoaded |
| 382 end | 383 end |
| 383 | 384 |
| 384 --- Returns true if data has changed (either from loading in or qualifications changed) | 385 --- Returns true if data has changed (either from loading in or qualifications changed) |
| 509 | 510 |
| 510 qprint(' '..self.questID..':|cFFFFFF00SetRewardInfo():', numQuestRewards, rewardType) | 511 qprint(' '..self.questID..':|cFFFFFF00SetRewardInfo():', numQuestRewards, rewardType) |
| 511 qprint(' ', tostring(self.title), " |T"..tostring(self.itemTexture)..":12:12|t", tostring(self.itemName)) | 512 qprint(' ', tostring(self.title), " |T"..tostring(self.itemTexture)..":12:12|t", tostring(self.itemName)) |
| 512 | 513 |
| 513 if (self.itemNumber ~= rewardCount) or (self.rewardType ~= rewardType) or (self.itemName ~= rewardName) or (self.itemTexture ~= rewardIcon) then | 514 if (self.itemNumber ~= rewardCount) or (self.rewardType ~= rewardType) or (self.itemName ~= rewardName) or (self.itemTexture ~= rewardIcon) then |
| 515 if DATA_DEBUG and (self.debugTimer <= 0) then | |
| 516 return false | |
| 517 end | |
| 518 | |
| 514 return true, rewardType, rewardName, rewardIcon, rewardCount, quality | 519 return true, rewardType, rewardName, rewardIcon, rewardCount, quality |
| 520 | |
| 515 else | 521 else |
| 516 return false | 522 return false |
| 517 end | 523 end |
| 518 end | 524 end |
| 519 | 525 |
| 563 if self.isStale then | 569 if self.isStale then |
| 564 qprint('|cFF0088FFflagged for refresh') | 570 qprint('|cFF0088FFflagged for refresh') |
| 565 self:Refresh() | 571 self:Refresh() |
| 566 end | 572 end |
| 567 | 573 |
| 568 if self.isNew or (not self.Overlay:IsShown()) then | 574 if self.isNew then |
| 569 --qprint('|cFFFFFF00popping new pin handler') | 575 qprint('|cFFFFFF00popping new pin handler') |
| 570 self:StartFade() | 576 self:StartFade() |
| 571 end | 577 end |
| 572 | 578 |
| 573 if not self.isAnimating then | 579 if not self.isAnimating then |
| 574 self:SetAlpha(db.PinAlpha) -- fix stuck alpha | 580 self:SetAlpha(db.PinAlpha) -- fix stuck alpha |
| 583 -- reset flags | 589 -- reset flags |
| 584 self:SetAlpha(db.PinAlpha) | 590 self:SetAlpha(db.PinAlpha) |
| 585 self.isAnimating = nil | 591 self.isAnimating = nil |
| 586 end | 592 end |
| 587 | 593 |
| 588 -- Places the pin and triggers display | 594 -- Applies position and sizing parameters to the pin data |
| 589 function QuestPOI:SetAnchor(owner, dX, dY, mapWidth, mapHeight, scaleFactor) | 595 function QuestPOI:SetAnchor(owner, dX, dY, mapWidth, mapHeight, scaleFactor) |
| 590 wqprint(self:GetName()..':SetAnchor()', owner, dX, dY, scaleFactor, self.filtered, self.used) | 596 dprint(self:GetName()..':SetAnchor()', owner, dX, dY, scaleFactor, self.filtered, self.used) |
| 591 if not self.used then | 597 if not self.used then |
| 592 self:HideFrames() | 598 self:HideFrames() |
| 593 return | 599 return |
| 594 end | 600 end |
| 595 | 601 |
| 596 self:SetScale(scaleFactor) | 602 if owner then |
| 597 self:SetParent(owner) | 603 local prevOwner = self:GetParent() |
| 604 if prevOwner ~= owner then | |
| 605 self.isStale = true | |
| 606 end | |
| 607 self:SetParent(owner) | |
| 608 self.Overlay:SetParent(owner) | |
| 609 else | |
| 610 owner = self:GetParent() | |
| 611 end | |
| 612 | |
| 598 self:ClearAllPoints() | 613 self:ClearAllPoints() |
| 599 self:SetFrameLevel(pinBaseIndex + self:GetID()) | 614 self:SetFrameLevel(pinBaseIndex + self:GetID()) |
| 600 self.Overlay:SetParent(owner) | |
| 601 self.Overlay:SetScale(scaleFactor) | |
| 602 self.Overlay:SetFrameLevel(overlayBaseIndex + self:GetID()) | 615 self.Overlay:SetFrameLevel(overlayBaseIndex + self:GetID()) |
| 616 | |
| 617 local scaleChanged | |
| 618 if scaleFactor and (self.scaleFactor ~= scaleFactor) then | |
| 619 print('scaleFactor') | |
| 620 self:SetScale(scaleFactor) | |
| 621 self.Overlay:SetScale(scaleFactor) | |
| 622 self.scaleFactor = scaleFactor | |
| 623 scaleChanged = true | |
| 624 end | |
| 625 | |
| 603 if (dX and dY) then | 626 if (dX and dY) then |
| 604 if not (mapHeight and mapWidth) then | 627 if not (mapHeight and mapWidth) then |
| 605 mapWidth, mapHeight = owner:GetSize() | 628 mapWidth, mapHeight = owner:GetSize() |
| 606 end | 629 end |
| 607 if (self.x ~= dY) or (self.y ~= dY) or (self.scaleFactor ~= scaleFactor) then | 630 |
| 631 if (self.x ~= dY) or (self.y ~= dY) or scaleChanged then | |
| 608 self.x = dX | 632 self.x = dX |
| 609 self.y = dY | 633 self.y = dY |
| 610 self.scaleFactor = scaleFactor | |
| 611 local pX = (dX * mapWidth) * (1 / scaleFactor) | 634 local pX = (dX * mapWidth) * (1 / scaleFactor) |
| 612 local pY = (-dY * mapHeight) * (1 / scaleFactor) | 635 local pY = (-dY * mapHeight) * (1 / scaleFactor) |
| 613 self:SetPoint('CENTER', owner, 'TOPLEFT', pX, pY) | 636 self:SetPoint('CENTER', owner, 'TOPLEFT', pX, pY) |
| 614 end | 637 end |
| 615 else | 638 end |
| 616 if self.x or self.y then | 639 |
| 617 self.x = nil | |
| 618 self.y = nil | |
| 619 self:SetPoint('CENTER') | |
| 620 end | |
| 621 end | |
| 622 | |
| 623 self:ShowFrames() | |
| 624 end | 640 end |
| 625 | 641 |
| 626 -- Show/Hide the text overlays associated with the quest pin; they aren't hierarchically linked | 642 -- Show/Hide the text overlays associated with the quest pin; they aren't hierarchically linked |
| 627 function QuestPOI:ShowFrames() | 643 function QuestPOI:ShowFrames() |
| 628 if not self:IsShown() then | 644 if not self:IsShown() then |
| 648 self.used = nil | 664 self.used = nil |
| 649 end | 665 end |
| 650 | 666 |
| 651 function QuestPOI:OnLoad() | 667 function QuestPOI:OnLoad() |
| 652 qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config) | 668 qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config) |
| 653 | 669 self.debugTimer = 4 |
| 654 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r' | 670 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r' |
| 655 self.isPending = true | 671 self.isPending = true |
| 656 self.count = self.Overlay.count | 672 self.count = self.Overlay.count |
| 657 self.timeLabel = self.Overlay.timeLabel | 673 self.timeLabel = self.Overlay.timeLabel |
| 658 self.Description = self.Overlay.Description | 674 self.Description = self.Overlay.Description |
| 672 end | 688 end |
| 673 | 689 |
| 674 | 690 |
| 675 function QuestPOI:OnUpdate (sinceLast) | 691 function QuestPOI:OnUpdate (sinceLast) |
| 676 -- control update check intervals | 692 -- control update check intervals |
| 693 | |
| 694 | |
| 677 self.throttle = (self.throttle or self.updateRate) + sinceLast | 695 self.throttle = (self.throttle or self.updateRate) + sinceLast |
| 678 if self.throttle >= self.updateRate then | 696 if self.throttle >= self.updateRate then |
| 679 -- factor overtime into the throttle timer | 697 -- factor overtime into the throttle timer |
| 680 self.throttle = self.throttle - self.updateRate | 698 self.throttle = self.throttle - self.updateRate |
| 681 else | 699 else |
| 682 return | 700 return |
| 683 end | 701 end |
| 684 if self.isNew then | 702 --@debug@ |
| 685 --print('|cFFFFFF00push new poi stuff') | 703 if DATA_DEBUG then |
| 686 self:OnNew() | 704 self.debugTimer = self.debugTimer - sinceLast |
| 687 elseif self.isStale then | 705 if self.debugTimer >= 0 then |
| 688 --wprint('|cFFFFFF00push poi update') | 706 print(self.debugTimer) |
| 689 self:Refresh() | 707 end |
| 690 return | 708 end |
| 691 end | 709 --@end-debug@ |
| 692 | 710 |
| 693 -- query for reward data if it wasn't found in the original scan | 711 -- query for reward data if it wasn't found in the original scan |
| 694 local questID = self.questID | 712 local questID = self.questID |
| 695 if not self.dataLoaded then | 713 if not self.dataLoaded then |
| 696 --print('|cFFFF4400'..self:GetID()..':|r polling reward info') | 714 print('|cFFFF4400'..self:GetID()..':|r polling reward info') |
| 697 if not (self.isAnimating) then | 715 if not (self.isAnimating) then |
| 698 self.PendingFade:Play() | 716 self.PendingFade:Play() |
| 699 end | 717 end |
| 700 local dataLoaded = self:GetData() | 718 local dataLoaded = self:GetData() |
| 701 if dataLoaded then | 719 if dataLoaded and not tContains(db.UpdatedPins, self) then |
| 702 WorldPlanQuests.isZoomDirty = true | 720 |
| 721 print('|cFF00FF88'..self:GetID()..':|r reward info loaded! queue it up') | |
| 722 | |
| 723 tinsert(db.UpdatedPins, self) | |
| 703 end | 724 end |
| 704 return | 725 return |
| 705 else | 726 else |
| 706 if self.PendingFade:IsPlaying() then | 727 if self.PendingFade:IsPlaying() then |
| 728 print('|cFFFF4400'..self:GetID()..':|r cancel fader') | |
| 707 self.PendingFade:Stop() | 729 self.PendingFade:Stop() |
| 730 end | |
| 731 | |
| 732 if self.isStale then | |
| 733 print(self.questID, '|cFFFFFF00flagged for update') | |
| 734 self:CheckFilterRules() | |
| 735 self:Refresh() | |
| 736 return | |
| 708 end | 737 end |
| 709 end | 738 end |
| 710 | 739 |
| 711 self:UpdateStatus() | 740 self:UpdateStatus() |
| 712 end | 741 end |
