Mercurial > wow > worldplan
comparison WorldPlan.lua @ 27:4a7e89bffbcb r27-beta
- Order Hall resource rewards now show numerals in quest pins.
- Fixed an occasional lua error that occurs when opening the quest map for the first time.
- Fixed another source of textures losing their masks.
author | Nenue |
---|---|
date | Thu, 27 Oct 2016 06:18:16 -0400 |
parents | 08b03bcdfeac |
children | c1612c2c1840 |
comparison
equal
deleted
inserted
replaced
26:99f6e6ffb2d1 | 27:4a7e89bffbcb |
---|---|
84 local POI_DEFAULT_TYPE = { | 84 local POI_DEFAULT_TYPE = { |
85 a = 1, | 85 a = 1, |
86 r = 1, g = 1, b = 1, | 86 r = 1, g = 1, b = 1, |
87 x = 0, y = 0, | 87 x = 0, y = 0, |
88 desaturated = true, | 88 desaturated = true, |
89 mask = POI_BORDER_MASK, | 89 pinMask = POI_BORDER_MASK, |
90 rewardMask = POI_BORDER_MASK, | |
90 texture = POI_BORDER_FILL, | 91 texture = POI_BORDER_FILL, |
91 continent = { | 92 continent = { |
92 PinSize = 18, | 93 PinSize = 18, |
93 Border = 3, | 94 Border = 3, |
94 TrackingBorder = 2, | 95 TrackingBorder = 2, |
95 TagSize = 6, | 96 TagSize = 6, |
96 TimeleftStage = 3, | 97 TimeleftStage = 3, |
98 showNumber = true, | |
97 }, | 99 }, |
98 zone = { | 100 zone = { |
99 PinSize = 22, | 101 PinSize = 22, |
100 Border = 3, | 102 Border = 3, |
101 TrackingBorder = 2, | 103 TrackingBorder = 2, |
102 TagSize = 12, | 104 TagSize = 12, |
103 TimeleftStage = 3, | 105 TimeleftStage = 3, |
106 showNumber = true, | |
104 }, | 107 }, |
105 minimized = { | 108 minimized = { |
106 PinSize = 4, | 109 PinSize = 4, |
107 Border = 1, | 110 Border = 1, |
108 TrackingBorder = 2, | 111 TrackingBorder = 2, |
109 NoIcon = true, | 112 NoIcon = true, |
110 TimeleftStage = 1, | 113 TimeleftStage = 1, |
114 showNumber = false, | |
111 } | 115 } |
112 } | 116 } |
113 local POI_REWARD_TYPE = setmetatable({}, { | 117 local POI_REWARD_TYPE = setmetatable({}, { |
114 __newindex = function(t, k, v) | 118 __newindex = function(t, k, v) |
115 if type(v) == 'table' then | 119 if type(v) == 'table' then |
136 POI_REWARD_TYPE[REWARD_REAGENT] = { | 140 POI_REWARD_TYPE[REWARD_REAGENT] = { |
137 r = 0, g = 1, b = 1, | 141 r = 0, g = 1, b = 1, |
138 } | 142 } |
139 POI_REWARD_TYPE[REWARD_ARTIFACT_POWER] = { | 143 POI_REWARD_TYPE[REWARD_ARTIFACT_POWER] = { |
140 r = 1, g = .25, b = .5, | 144 r = 1, g = .25, b = .5, |
141 showNumber = true, | 145 hasNumeric = true, |
146 numberRGB = {1, 1, 1}, | |
142 } | 147 } |
143 POI_REWARD_TYPE[REWARD_GEAR] = { | 148 POI_REWARD_TYPE[REWARD_GEAR] = { |
144 r = .1, g = .2, b = 1, | 149 r = .1, g = .2, b = 1, |
145 } | 150 } |
146 POI_REWARD_TYPE[REWARD_CURRENCY] = { | 151 POI_REWARD_TYPE[REWARD_CURRENCY] = { |
147 r = 1, g = 1, b = 0, | 152 r = 1, g = 1, b = 0, |
153 hasNumeric = true, | |
154 numberRGB = {1, 1, 1}, | |
148 } | 155 } |
149 POI_REWARD_TYPE[REWARD_CASH] = { | 156 POI_REWARD_TYPE[REWARD_CASH] = { |
150 r = 0, g = 0, b = 0, | 157 r = 0, g = 0, b = 0, |
151 --x = 0, y = -1, | 158 --x = 0, y = -1, |
152 --mask = ICON_MONEY, | 159 --mask = ICON_MONEY, |
158 | 165 |
159 local defaults = { | 166 local defaults = { |
160 defaultPinStyle = POI_DEFAULT_TYPE, | 167 defaultPinStyle = POI_DEFAULT_TYPE, |
161 rewardStyle = POI_REWARD_TYPE, | 168 rewardStyle = POI_REWARD_TYPE, |
162 filterStyle = POI_FILTER_STYLE, | 169 filterStyle = POI_FILTER_STYLE, |
163 ShowAllProfessionQuests = true, | 170 ShowAllProfessionQuests = false, |
164 DisplayContinentSummary = true, | 171 DisplayContinentSummary = true, |
165 DisplayContinentPins = true, | 172 DisplayContinentPins = true, |
166 NotifyWhenNewQuests = true, | 173 NotifyWhenNewQuests = true, |
167 EnablePins = true, | 174 EnablePins = true, |
168 FadeWhileGrouped = true, | 175 FadeWhileGrouped = true, |
227 if #tasksQueue == 0 then | 234 if #tasksQueue == 0 then |
228 _G.WorldPlan:SetScript('OnUpdate', nil) | 235 _G.WorldPlan:SetScript('OnUpdate', nil) |
229 end | 236 end |
230 end) | 237 end) |
231 end | 238 end |
239 print('inserting task #', #tasksQueue+1, func) | |
232 tinsert(tasksQueue, func) | 240 tinsert(tasksQueue, func) |
233 end | 241 end |
234 | 242 |
235 -- combines templates | 243 -- combines templates |
236 local function DoMixins(frame,...) | 244 local function DoMixins(frame,...) |
335 self:RegisterEvent("WORLD_QUEST_COMPLETED_BY_SPELL") | 343 self:RegisterEvent("WORLD_QUEST_COMPLETED_BY_SPELL") |
336 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED") | 344 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED") |
337 self:RegisterEvent("SKILL_LINES_CHANGED") | 345 self:RegisterEvent("SKILL_LINES_CHANGED") |
338 self:RegisterEvent("ARTIFACT_XP_UPDATE") | 346 self:RegisterEvent("ARTIFACT_XP_UPDATE") |
339 self:RegisterEvent("ADDON_LOADED") | 347 self:RegisterEvent("ADDON_LOADED") |
348 self:SetParent(WorldMapFrame) | |
340 | 349 |
341 WorldPlan.modules = { | 350 WorldPlan.modules = { |
342 WorldQuests, FilterBar, WorldPlanFlightMapMixin, | 351 WorldQuests, FilterBar, WorldPlanFlightMapMixin, |
343 } | 352 } |
344 end | 353 end |
345 | 354 |
355 function WorldPlan:OnShow() | |
356 print(self:GetName()..':OnShow()') | |
357 if self.isStale then | |
358 self:RefreshAll() | |
359 end | |
360 | |
361 end | |
362 | |
346 function WorldPlan:OnEvent (event, ...) | 363 function WorldPlan:OnEvent (event, ...) |
347 print() | 364 print() |
348 print(event, ...) | 365 print(event, self.initialized) |
349 if event == 'ADDON_LOADED' then | 366 if event == 'ADDON_LOADED' then |
350 local addon = ... | 367 local addon = ... |
351 if addon == "Blizzard_FlightMap" then | 368 if addon == "Blizzard_FlightMap" then |
352 print('do mixin junk') | 369 print('do mixin junk') |
353 self.OnFlightMapLoaded() | 370 self.OnFlightMapLoaded() |
357 self:Setup() | 374 self:Setup() |
358 end | 375 end |
359 elseif event == 'WORLD_MAP_UPDATE' then | 376 elseif event == 'WORLD_MAP_UPDATE' then |
360 self.currentMapID = GetCurrentMapAreaID() | 377 self.currentMapID = GetCurrentMapAreaID() |
361 self:RefreshAll() | 378 self:RefreshAll() |
362 end | 379 else |
363 for i, module in ipairs(self.modules) do | 380 for i, module in ipairs(self.modules) do |
364 if module.OnEvent then | 381 if module.OnEvent then |
365 print('forwarding to', tostring(module)) | 382 print('forwarding to', tostring(module)) |
366 module:OnEvent(event, ...) | 383 module:OnEvent(event, ...) |
384 end | |
367 end | 385 end |
368 end | 386 end |
369 end | 387 end |
370 | 388 |
371 | 389 |
524 end) | 542 end) |
525 | 543 |
526 end | 544 end |
527 | 545 |
528 function WorldQuests:OnEvent (event, ...) | 546 function WorldQuests:OnEvent (event, ...) |
529 print('|cFFFFFF00'..tostring(self)..':OnEvent()'..event..'|r', ...) | 547 print('|cFFFFFF00'..tostring(self)..':OnEvent()'..event..'|r', GetTime(), ...) |
530 if event == 'QUEST_LOG_UPDATE' then | 548 if event == 'QUEST_LOG_UPDATE' then |
531 local questID, added = ... | 549 local questID, added = ... |
532 if questID and added then | 550 if questID and added then |
533 self:GetPinByQuestID(questID) | 551 self:GetPinByQuestID(questID) |
534 else | 552 else |
535 self:GetPinsForMap() | 553 self:GetPinsForMap() |
536 end | 554 end |
555 print('WorldMapFrame', WorldMapFrame:IsVisible(), 'doRefresh:', hasNewQuestPins) | |
556 if WorldMapFrame:IsVisible() and hasNewQuestPins then | |
557 self:Refresh(true) | |
558 end | |
559 | |
537 elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then | 560 elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then |
538 local questID = ... | 561 local questID = ... |
539 if questID and QuestsByID[questID] then | 562 if questID and QuestsByID[questID] then |
540 self:ReleasePin(QuestsByID[questID]) | 563 self:ReleasePin(QuestsByID[questID]) |
541 end | 564 end |
643 QuestsByZone[mapID][questID] = self:GetPinByQuestID(questID, info) | 666 QuestsByZone[mapID][questID] = self:GetPinByQuestID(questID, info) |
644 numQuests = numQuests + 1 | 667 numQuests = numQuests + 1 |
645 end | 668 end |
646 end | 669 end |
647 end | 670 end |
648 if hasNewQuestPins and not self.fullSearch then | |
649 print('|cFF00FF00NEW PINS DO ANCHOR THINGS') | |
650 self:Refresh (true) | |
651 hasNewQuestPins = nil | |
652 end | |
653 end | 671 end |
654 | 672 |
655 -- create or update the pin using the given questID and C_TaskQuest results | 673 -- create or update the pin using the given questID and C_TaskQuest results |
656 function WorldQuests:GetPinByQuestID (questID, taskInfo) | 674 function WorldQuests:GetPinByQuestID (questID, taskInfo) |
657 if (QuestMapFrame_IsQuestWorldQuest (questID)) then | 675 |
658 local questTitle, rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality, _ | 676 local questTitle, rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality, _ |
659 local pin = self:AcquirePin(questID, taskInfo) | 677 local pin = self:AcquirePin(questID, taskInfo) |
660 | 678 |
661 if pin.isNew then | 679 if pin.isNew then |
662 if not hasNewQuestPins then | 680 if not hasNewQuestPins then |
699 local questTitle, factionID, capped = TQ_GetQuestInfoByQuestID(questID) | 717 local questTitle, factionID, capped = TQ_GetQuestInfoByQuestID(questID) |
700 if factionID then | 718 if factionID then |
701 QuestsByFaction[factionID] = QuestsByFaction[factionID] or {} | 719 QuestsByFaction[factionID] = QuestsByFaction[factionID] or {} |
702 QuestsByFaction[factionID][questID] = pin | 720 QuestsByFaction[factionID][questID] = pin |
703 end | 721 end |
704 pin.title = questTitle or "|cFFFF0000Retrieving..." | |
705 pin.factionID = factionID | 722 pin.factionID = factionID |
706 pin.capped = capped | 723 pin.capped = capped |
707 | 724 |
708 -- set tag details | 725 -- set tag details |
709 local tagID, tagName, worldQuestType, rarity, isElite, tradeskillLineIndex = GetQuestTagInfo(questID); | 726 local tagID, tagName, worldQuestType, rarity, isElite, tradeskillLineIndex = GetQuestTagInfo(questID); |
726 pin.worldQuestType = worldQuestType | 743 pin.worldQuestType = worldQuestType |
727 pin.isElite = isElite | 744 pin.isElite = isElite |
728 pin.tradeskillLineIndex = tradeskillLineIndex | 745 pin.tradeskillLineIndex = tradeskillLineIndex |
729 pin.rarity = rarity | 746 pin.rarity = rarity |
730 pin.tagAtlas = tagAtlas | 747 pin.tagAtlas = tagAtlas |
731 end | |
732 | 748 |
733 -- flag unresolved info | 749 -- flag unresolved info |
734 if not (rewardIcon and rewardName) then | 750 if not (rewardIcon and rewardName) then |
735 if not pin.isPending then | 751 if not pin.isPending then |
736 pin.isPending = true | 752 pin.isPending = true |
749 --WorldPlan:print('|cFF00FF00'..tostring(pin.title)..'|r has info', rewardIcon, rewardName) | 765 --WorldPlan:print('|cFF00FF00'..tostring(pin.title)..'|r has info', rewardIcon, rewardName) |
750 pin.hasUpdate = true | 766 pin.hasUpdate = true |
751 end | 767 end |
752 pin.isPending = nil | 768 pin.isPending = nil |
753 end | 769 end |
770 | |
771 pin.title = questTitle or "|cFFFF0000Retrieving..." | |
754 pin.itemTexture = rewardIcon or pin.itemTexture | 772 pin.itemTexture = rewardIcon or pin.itemTexture |
755 pin.itemName = rewardName or pin.itemName | 773 pin.itemName = rewardName or pin.itemName |
756 | 774 |
757 qprint(' |cFF00FFFF'..questID..'|r:->', (HaveQuestData(questID) and "|cFF00FF00HaveQuestData" or "-"), (C_TaskQuest.IsActive(questID) and "|cFF88FF00IsActive|r" or "")) | 775 qprint(' |cFF00FFFF'..questID..'|r:->', (HaveQuestData(questID) and "|cFF00FF00HaveQuestData" or "-"), (C_TaskQuest.IsActive(questID) and "|cFF88FF00IsActive|r" or "")) |
758 qprint(' ', pin.title, pin.itemTexture, 'rewardType:', pin.rewardType, 'tag:', pin.tagID, 'style', pin.style ) | 776 qprint(' ', pin.title, pin.itemTexture, 'rewardType:', pin.rewardType, 'tag:', pin.tagID, 'style', pin.style ) |
848 | 866 |
849 numPins = 0 | 867 numPins = 0 |
850 for questID, pin in pairs(QuestsByID) do | 868 for questID, pin in pairs(QuestsByID) do |
851 -- can we show it? | 869 -- can we show it? |
852 if showQuestPOI and (pin.used) then | 870 if showQuestPOI and (pin.used) then |
853 pin:Refresh() | |
854 | 871 |
855 if fadeGrouped then | 872 if fadeGrouped then |
856 pin:SetAlpha(0.25) | 873 pin:SetAlpha(0.25) |
857 else | 874 else |
858 pin:SetAlpha(1) | 875 pin:SetAlpha(1) |
860 -- is it a new quest? | 877 -- is it a new quest? |
861 if pin.isNew then | 878 if pin.isNew then |
862 if not pin.isAnimating then | 879 if not pin.isAnimating then |
863 pin.isAnimating = true | 880 pin.isAnimating = true |
864 OnNext(function() | 881 OnNext(function() |
865 pin.isNew = nil | 882 pin:ShowNew() |
866 pin:Show() | |
867 pin.FadeIn:Play() | |
868 end) | 883 end) |
869 if not notifyPlayed then | 884 if not notifyPlayed then |
870 for k,v in pairs(NotificationTypes) do | 885 for k,v in pairs(NotificationTypes) do |
871 if v[pin[k]] then | 886 if v[pin[k]] then |
872 notifyPlayed = true | 887 notifyPlayed = true |
881 end | 896 end |
882 -- trap new but animating pins here | 897 -- trap new but animating pins here |
883 else | 898 else |
884 -- hard show existing pin | 899 -- hard show existing pin |
885 print('refresh #', questID, 'filtered:', pin.filtered) | 900 print('refresh #', questID, 'filtered:', pin.filtered) |
886 pin:Show() | 901 pin.hasUpdate = true |
902 pin:Show(true) | |
887 tinsert(debug_show,questID) | 903 tinsert(debug_show,questID) |
888 end | 904 end |
889 else | 905 else |
890 if pin:IsShown() then | 906 if pin:IsShown() then |
891 tinsert(debug_hide,questID) | 907 tinsert(debug_hide,questID) |
994 end | 1010 end |
995 | 1011 |
996 --- Fixes icons upon size update | 1012 --- Fixes icons upon size update |
997 function QuestPOI:UpdateSize (style, subStyle) | 1013 function QuestPOI:UpdateSize (style, subStyle) |
998 self.style = self.style or POI_DEFAULT_TYPE | 1014 self.style = self.style or POI_DEFAULT_TYPE |
999 self.subStyle = self.subStyle or 'continent' | |
1000 | |
1001 style = style or self.style | 1015 style = style or self.style |
1002 subStyle = style[subStyle or self.subStyle] | 1016 subStyle = subStyle or self.subStyle |
1003 | 1017 |
1018 qprint('|cFF00FF88'..self:GetName()..'|r:UpdateSize()', style, subStyle) | |
1004 | 1019 |
1005 self.currentWidth = subStyle.PinSize | 1020 self.currentWidth = subStyle.PinSize |
1006 self.borderSize = subStyle.Border | 1021 self.borderSize = subStyle.Border |
1007 self.trackingBorderSize = subStyle.TrackingBorder | 1022 self.trackingBorderSize = subStyle.TrackingBorder |
1008 self.tagSize = subStyle.TagSize | 1023 self.tagSize = subStyle.TagSize |
1009 self.TimeleftStage = subStyle.TimeleftStage | 1024 self.TimeleftStage = subStyle.TimeleftStage |
1010 self.NoIcon = subStyle.NoIcon | 1025 self.NoIcon = subStyle.NoIcon |
1011 | 1026 |
1027 | |
1012 self:SetSize(self.currentWidth, self.currentWidth) | 1028 self:SetSize(self.currentWidth, self.currentWidth) |
1013 | 1029 |
1030 local icon = self.icon | |
1014 local iconBorder = self.iconBorder | 1031 local iconBorder = self.iconBorder |
1015 local trackingBorder = self.supertrackBorder | 1032 local trackingBorder = self.supertrackBorder |
1016 local tag = self.tagIcon | 1033 local tag = self.tagIcon |
1017 local style = self.style or POI_DEFAULT_TYPE | 1034 local pinMask = style.pinMask |
1018 local mask = style.mask or POI_BORDER_FILL | 1035 local rewardMask = style.rewardMask |
1019 | 1036 |
1020 self.icon:SetMask(nil) | 1037 if self.NoIcon then |
1021 self.iconBorder:SetMask(nil) | 1038 self.icon:Hide() |
1022 self.supertrackBorder:SetMask(nil) | 1039 else |
1040 self.icon:Show() | |
1041 icon:SetMask(nil) | |
1042 icon:SetMask(rewardMask) | |
1043 icon:SetTexture(self.icon:GetTexture()) | |
1044 end | |
1045 iconBorder:SetMask(nil) | |
1046 trackingBorder:SetMask(nil) | |
1023 | 1047 |
1024 | 1048 |
1025 local borderWidth = self.borderSize | 1049 local borderWidth = self.borderSize |
1026 local trackingWidth = self.trackingBorderSize | 1050 local trackingWidth = self.trackingBorderSize |
1027 | 1051 |
1040 else | 1064 else |
1041 tag:Hide() | 1065 tag:Hide() |
1042 end | 1066 end |
1043 | 1067 |
1044 --qprint('using mask:', mask, self.name ) | 1068 --qprint('using mask:', mask, self.name ) |
1045 self.icon:SetMask(mask) | 1069 iconBorder:SetMask(pinMask) |
1046 self.icon:SetTexture(self.icon:GetTexture()) | 1070 trackingBorder:SetMask(pinMask) |
1047 self.iconBorder:SetMask(mask) | 1071 |
1048 self.supertrackBorder:SetMask(mask) | |
1049 | |
1050 if self.NoIcon then | |
1051 self.icon:Hide() | |
1052 else | |
1053 self.icon:Show() | |
1054 end | |
1055 | 1072 |
1056 end | 1073 end |
1057 | 1074 |
1058 | 1075 |
1059 function FilterBar:OnEvent(event) | 1076 function FilterBar:OnEvent(event) |
1234 function FilterPin:OnLoad() | 1251 function FilterPin:OnLoad() |
1235 self:RegisterForClicks('AnyUp') | 1252 self:RegisterForClicks('AnyUp') |
1236 self:SetFrameStrata('HIGH') | 1253 self:SetFrameStrata('HIGH') |
1237 self:SetFrameLevel(151) | 1254 self:SetFrameLevel(151) |
1238 self:SetScript('OnUpdate', nil) | 1255 self:SetScript('OnUpdate', nil) |
1256 self.style = db.filterStyle | |
1257 self.subStyle = db.defaultPinStyle.continent | |
1239 end | 1258 end |
1240 | 1259 |
1241 function FilterPin:OnUpdate () | 1260 function FilterPin:OnUpdate () |
1242 | 1261 |
1243 end | 1262 end |