Mercurial > wow > worldplan
comparison WorldQuests.lua @ 69:31de7e9e7849
stop hiding pins when the timeleft returns 0; use C_TQ.IsActive
author | Nenue |
---|---|
date | Wed, 05 Apr 2017 11:36:06 -0400 |
parents | 96183f981acb |
children | d6c0bed32c51 |
comparison
equal
deleted
inserted
replaced
68:cce68795f955 | 69:31de7e9e7849 |
---|---|
11 local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID | 11 local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID |
12 local TQ_IsActive = C_TaskQuest.IsActive | 12 local TQ_IsActive = C_TaskQuest.IsActive |
13 local pairs, ipairs, tinsert, tremove, wipe = pairs, ipairs, tinsert, tremove, table.wipe | 13 local pairs, ipairs, tinsert, tremove, wipe = pairs, ipairs, tinsert, tremove, table.wipe |
14 local GetTaskInfo, GetTasksTable, HaveQuestData = GetTaskInfo, GetTasksTable, HaveQuestData | 14 local GetTaskInfo, GetTasksTable, HaveQuestData = GetTaskInfo, GetTasksTable, HaveQuestData |
15 local GetTime = GetTime | 15 local GetTime = GetTime |
16 local SpellCanTargetQuest = SpellCanTargetQuest | 16 local SpellCanTargetQuest, IsQuestIDValidSpellTarget = SpellCanTargetQuest, IsQuestIDValidSpellTarget |
17 local tonumber, abs = tonumber, math.abs | 17 local tonumber, abs = tonumber, math.abs |
18 local GetQuestLogRewardInfo = GetQuestLogRewardInfo | 18 local GetQuestLogRewardInfo = GetQuestLogRewardInfo |
19 local GetCurrentMapAreaID, GetMapInfo, GetMapNameByID = GetCurrentMapAreaID, GetMapInfo, GetMapNameByID | 19 local GetCurrentMapAreaID, GetMapInfo, GetMapNameByID = GetCurrentMapAreaID, GetMapInfo, GetMapNameByID |
20 | 20 |
21 | 21 |
23 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or function() end | 23 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or function() end |
24 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end | 24 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end |
25 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end | 25 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end |
26 local mprint = DEVIAN_WORKSPACE and function(...) _G.print('Canvas', ...) end or function() end | 26 local mprint = DEVIAN_WORKSPACE and function(...) _G.print('Canvas', ...) end or function() end |
27 | 27 |
28 local ToggleButton = {} | |
29 local callbacks = {} | |
28 local PinBaseIndex = 1200 | 30 local PinBaseIndex = 1200 |
29 local BROKEN_ISLES_ID, DALARAN_ID, AZSUNA_ID, VALSHARAH_ID, HIGHMOUNTAIN_ID, STORMHEIM_ID, SURAMAR_ID, EOA_ID = 1007, 1014, 1015,1018, 1024, 1017, 1033, 1096 | 31 local BROKEN_ISLES_ID, DALARAN_ID, AZSUNA_ID, VALSHARAH_ID, HIGHMOUNTAIN_ID, STORMHEIM_ID, SURAMAR_ID, EOA_ID = 1007, 1014, 1015,1018, 1024, 1017, 1033, 1096 |
30 local WORLD_QUEST_MAPS = { [DALARAN_ID] = 'Dalaran70', [AZSUNA_ID] = 'Azsuna', [VALSHARAH_ID] = "Val'sharah", | 32 local WORLD_QUEST_MAPS = { [DALARAN_ID] = 'Dalaran70', [AZSUNA_ID] = 'Azsuna', [VALSHARAH_ID] = "Val'sharah", |
31 [HIGHMOUNTAIN_ID] = 'Highmountain', [STORMHEIM_ID] = 'Stormheim', [SURAMAR_ID] = 'Suramar', [EOA_ID] = 'EyeOfAszhara', } | 33 [HIGHMOUNTAIN_ID] = 'Highmountain', [STORMHEIM_ID] = 'Stormheim', [SURAMAR_ID] = 'Suramar', [EOA_ID] = 'EyeOfAszhara', } |
32 | 34 |
37 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS | 39 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS |
38 local SCALE_FACTORS = { | 40 local SCALE_FACTORS = { |
39 0.25, 0.7, 1 | 41 0.25, 0.7, 1 |
40 } | 42 } |
41 | 43 |
42 local ToggleButton = {} | 44 local currentScale = WorldMapDetailFrame:GetScale() |
45 local canTargetQuests | |
43 local numShown = 0 | 46 local numShown = 0 |
44 local numLoaded = 0 | 47 local numLoaded = 0 |
45 local isDataLoaded | 48 local isDataLoaded = true |
46 local numPins = 0 | 49 local numOverlays = 1 |
47 local NumPinFrames = 1 | |
48 local scaleConstant = 1 | 50 local scaleConstant = 1 |
49 Module.TasksByID = {} | 51 Module.TasksByID = {} |
50 | 52 |
51 --%debug% | 53 --%debug% |
52 local SetTimedCallbackForAllPins = function(seconds, callback) | 54 local SetTimedCallbackForAllPins = function(seconds, callback) |
67 self:UpdateQueuedPins() | 69 self:UpdateQueuedPins() |
68 end | 70 end |
69 | 71 |
70 end | 72 end |
71 | 73 |
72 local currentScale = WorldMapDetailFrame:GetScale() | |
73 function Module:RefreshIfChanged() | |
74 local scaleCheck = WorldMapDetailFrame:GetScale() | |
75 if scaleCheck ~= currentScale then | |
76 print('|cFF00FF88scale changed from', currentScale, 'to', scaleCheck) | |
77 self:Refresh() | |
78 currentScale = scaleCheck | |
79 end | |
80 end | |
81 | 74 |
82 function Module:Setup() | 75 function Module:Setup() |
83 print('|cFFFF4400'..self:GetName()..':Setup()') | 76 print('|cFFFF4400'..self:GetName()..':Setup()') |
84 | |
85 for mapID, mapName in pairs(WORLD_QUEST_MAPS) do | 77 for mapID, mapName in pairs(WORLD_QUEST_MAPS) do |
86 db.QuestsByZone[mapID] = {} | 78 db.QuestsByZone[mapID] = {} |
87 end | 79 end |
88 | 80 for target, arg in pairs(callbacks) do |
89 hooksecurefunc("ClickWorldMapActionButton", function () self:OnClickWorldMapActionButton() end) | 81 print(type(target)) |
90 hooksecurefunc("WorldMapScrollFrame_ReanchorQuestPOIs", function() | 82 if type(target) == 'table' then |
91 print("WorldMapScrollFrame_ReanchorQuestPOIs") | 83 local callerName = target:GetName() |
92 self:RefreshIfChanged() | 84 for name, method in pairs(arg) do |
93 end) | 85 print(callerName, arg) |
94 hooksecurefunc("WorldMap_UpdateQuestBonusObjectives", function () | 86 hooksecurefunc(target, name, function(...) |
95 self:OnUpdateQuestBonusObjectives() | 87 self:OnSecureHook(callerName .. '.' .. arg, method, ...) |
96 end) | 88 end) |
97 hooksecurefunc("WorldMapFrame_UpdateMap", function() | 89 end |
98 print("WorldMapFrame_UpdateMap") | 90 else |
99 self:RefreshIfChanged() | 91 hooksecurefunc(target, function(...) |
100 end) | 92 self:OnSecureHook(target, arg, ...) |
101 WorldMapFrame.UIElementsFrame.BountyBoard:SetSelectedBountyChangedCallback(function() | 93 end) |
102 self:OnSelectedBountyChanged() | 94 end |
103 end); | 95 end |
104 WorldMapFrame.UIElementsFrame.ActionButton:SetOnCastChangedCallback(function() | |
105 print("CastChangedCallback") | |
106 self:Refresh(true) | |
107 end); | |
108 | 96 |
109 self.Status = CreateFrame('Frame', nil, self) | 97 self.Status = CreateFrame('Frame', nil, self) |
110 self.Status:SetPoint('TOPLEFT', WorldMapPOIFrame, 'TOPLEFT', 0, 0) | 98 self.Status:SetPoint('TOPLEFT', WorldMapPOIFrame, 'TOPLEFT', 0, 0) |
111 self.Status:SetPoint('BOTTOMRIGHT', WorldMapPOIFrame, 'TOPRIGHT', 0, -4) | 99 self.Status:SetPoint('BOTTOMRIGHT', WorldMapPOIFrame, 'TOPRIGHT', 0, -4) |
112 self.Status.t = self.Status:CreateTexture(nil, 'OVERLAY') | 100 self.Status.t = self.Status:CreateTexture(nil, 'OVERLAY') |
125 status.t:SetWidth(translateTo) | 113 status.t:SetWidth(translateTo) |
126 else | 114 else |
127 translateTo = numShown * status:GetWidth() | 115 translateTo = numShown * status:GetWidth() |
128 status.t:SetWidth(translateTo) | 116 status.t:SetWidth(translateTo) |
129 end | 117 end |
130 | |
131 | |
132 end) | 118 end) |
133 | 119 |
134 self:SetAllPoints(WorldMapPOIFrame) | 120 self:SetAllPoints(WorldMapPOIFrame) |
135 for k,v in pairs( ToggleButton) do | 121 for k,v in pairs( ToggleButton) do |
136 self.Toggle:SetScript(k,v) | 122 self.Toggle:SetScript(k,v) |
137 end | 123 end |
138 self:Show() | 124 self:Show() |
139 end | 125 end |
126 callbacks.ClickWorldMapActionButton = function(WorldQuests) | |
127 WorldQuests:GetUsedPOIs() | |
128 end | |
129 callbacks.WorldMap_UpdateQuestBonusObjectives = function(WorldQuests) | |
130 WorldQuests:GetUsedPOIs() | |
131 end | |
132 callbacks.WorldMapFrame_UpdateMap = function(WorldQuests) | |
133 WorldQuests:RefreshIfChanged() | |
134 end | |
135 callbacks.WorldMapScrollFrame_ReanchorQuestPOIs = function (WorldQuests) | |
136 WorldQuests:RefreshIfChanged() | |
137 end | |
138 callbacks[WorldMapFrame.UIElementsFrame.BountyBoard] = { | |
139 SetSelectedBountyIndex = function(WorldQuests) | |
140 WorldQuests:UpdateBountyInfo() | |
141 end | |
142 } | |
143 callbacks[WorldMapFrame.UIElementsFrame.ActionButton] = { | |
144 UpdateCastingState = function(WorldQuests) | |
145 WorldQuests:Refresh(true) | |
146 end | |
147 } | |
148 | |
140 | 149 |
141 local GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted = GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted | 150 local GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted = GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted |
142 function Module:UpdateBountyInfo() | 151 function Module:UpdateBountyInfo() |
143 wipe(db.BountyInfo) | 152 wipe(db.BountyInfo) |
144 db.selectedBounty = nil | 153 db.selectedBounty = nil |
179 end | 188 end |
180 end | 189 end |
181 db.BountyUpdate = nil | 190 db.BountyUpdate = nil |
182 end | 191 end |
183 | 192 |
184 function Module:OnSelectedBountyChanged() | |
185 self:UpdateBountyInfo() | |
186 end | |
187 | |
188 function Module:OnConfigUpdate() | 193 function Module:OnConfigUpdate() |
189 print('|cFFFFFF00OnConfigUpdate()|r') | 194 print('|cFFFFFF00OnConfigUpdate()|r') |
190 if db.Config.FadeWhileGrouped then | 195 if db.Config.FadeWhileGrouped then |
191 db.PinAlpha = 0.15 | 196 db.PinAlpha = 0.15 |
192 else | 197 else |
215 if button.questID and db.QuestsByID[button.questID] then | 220 if button.questID and db.QuestsByID[button.questID] then |
216 db.QuestsByID[button.questID]:SetShown(false) | 221 db.QuestsByID[button.questID]:SetShown(false) |
217 end | 222 end |
218 end | 223 end |
219 | 224 |
220 function Module:UpdateBlizzButtons() | 225 db.UsedPOIs = {} |
221 | 226 function Module:GetUsedPOIs() |
222 local func = SpellCanTargetQuest() and InternalShowButton or InternalHideButton | 227 db.canTargetQuests = SpellCanTargetQuest() |
228 local func = db.canTargetQuests and InternalShowButton or InternalHideButton | |
229 wipe(db.UsedPOIs) | |
223 for i = 1, NUM_WORLDMAP_TASK_POIS do | 230 for i = 1, NUM_WORLDMAP_TASK_POIS do |
224 local button = _G['WorldMapFrameTaskPOI'..i] | 231 local button = _G['WorldMapFrameTaskPOI'..i] |
225 if button and button.worldQuest then | 232 if button and button.worldQuest then |
226 func(button, i) | 233 func(button, i) |
227 end | 234 db.UsedPOIs[button.questID] = button |
228 end | 235 end |
229 end | 236 end |
230 | 237 end |
231 function Module:OnUpdateQuestBonusObjectives() | 238 |
232 rprint('|cFFFF4400WorldMap_UpdateQuestBonusObjectives') | 239 function Module:OnSecureHook(callbackName, func, ...) |
233 self:UpdateBlizzButtons() | 240 rprint('|cFFFF4400'..callbackName..'|r', ...) |
234 end | 241 func(self, ...) |
235 | |
236 function Module:OnClickWorldMapActionButton() | |
237 rprint('|cFFFF4400ClickWorldMapActionButton') | |
238 self:UpdateBlizzButtons() | |
239 end | 242 end |
240 | 243 |
241 local defaults = {} | 244 local defaults = {} |
242 local REWARD_UNKNOWN = 768 | 245 local REWARD_UNKNOWN = 768 |
243 function Module:OnLoad() | 246 function Module:OnLoad() |
253 -- WORLD_MAP_UPDATE and PLAYER_ENTERING_WORLD are passed down from a higher level | 256 -- WORLD_MAP_UPDATE and PLAYER_ENTERING_WORLD are passed down from a higher level |
254 self:RegisterEvent('WORLD_QUEST_COMPLETED_BY_SPELL') | 257 self:RegisterEvent('WORLD_QUEST_COMPLETED_BY_SPELL') |
255 self:RegisterEvent('SUPER_TRACKED_QUEST_CHANGED') | 258 self:RegisterEvent('SUPER_TRACKED_QUEST_CHANGED') |
256 self:RegisterEvent('SKILL_LINES_CHANGED') | 259 self:RegisterEvent('SKILL_LINES_CHANGED') |
257 self:RegisterEvent('CURRENT_SPELL_CAST_CHANGED') | 260 self:RegisterEvent('CURRENT_SPELL_CAST_CHANGED') |
261 self:RegisterEvent('ARTIFACT_UPDATE') | |
258 end | 262 end |
259 | 263 |
260 function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen) | 264 function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen) |
261 | 265 |
262 print('|cFFFFFF00'..self:GetName()..':OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap) | 266 print('|cFFFFFF00'..self:GetName()..':OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap) |
276 end | 280 end |
277 local superTrackedQuestID | 281 local superTrackedQuestID |
278 function Module:OnEvent (event, ...) | 282 function Module:OnEvent (event, ...) |
279 | 283 |
280 print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...) | 284 print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...) |
281 if (event == 'QUEST_LOG_UPDATE') or (event == 'SUPER_TRACKED_QUEST_CHANGED') then | 285 if (event == 'QUEST_LOG_UPDATE') then |
282 local questID, added = ... | 286 if self:IsVisible() then |
283 if questID and added then | 287 self:Refresh() |
284 local questPOI = self:AcquirePin(questID) | 288 else |
285 questPOI:GetQuestInfo() | |
286 questPOI.isStale = true | |
287 self.isStale = true | 289 self.isStale = true |
288 else | |
289 self:Refresh() | |
290 end | 290 end |
291 print('WorldMapFrame', WorldMapFrame:IsVisible(), 'hasUpdates:', self.isStale) | 291 print('WorldMapFrame', WorldMapFrame:IsVisible(), 'hasUpdates:', self.isStale) |
292 elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then | 292 elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then |
293 local questID = ... | 293 local questID = ... |
294 if questID and db.QuestsByID[questID] then | 294 if questID and db.QuestsByID[questID] then |
301 local ak = C_ArtifactUI.GetArtifactKnowledgeMultiplier() | 301 local ak = C_ArtifactUI.GetArtifactKnowledgeMultiplier() |
302 if ak and (ak ~= self.akLevel) then | 302 if ak and (ak ~= self.akLevel) then |
303 print('push artifact knowledge update', self.akLevel, 'to', ak) | 303 print('push artifact knowledge update', self.akLevel, 'to', ak) |
304 self.akLevel = ak | 304 self.akLevel = ak |
305 for index, pin in pairs( db.QuestsByID) do | 305 for index, pin in pairs( db.QuestsByID) do |
306 pin.dataLoaded = nil | 306 if pin.rewardType == REWARD_ARTIFACT_POWER then |
307 end | 307 pin.dataLoaded = nil |
308 self:Refresh() | 308 end |
309 end | |
309 end | 310 end |
310 elseif event == 'SUPER_TRACKED_QUEST_CHANGED' then | 311 elseif event == 'SUPER_TRACKED_QUEST_CHANGED' then |
311 if superTrackedQuestID and db.QuestsByID[superTrackedQuestID] then | 312 if superTrackedQuestID and db.QuestsByID[superTrackedQuestID] then |
312 db.QuestsByID[superTrackedQuestID].isStale = true | 313 db.QuestsByID[superTrackedQuestID].isStale = true |
313 end | 314 end |
337 if numFree >= 1 then | 338 if numFree >= 1 then |
338 pin = tremove(db.FreePins, numFree) | 339 pin = tremove(db.FreePins, numFree) |
339 --print('|cFF00FF00Re-using', pin:GetName()) | 340 --print('|cFF00FF00Re-using', pin:GetName()) |
340 else | 341 else |
341 totalPins = totalPins + 1 | 342 totalPins = totalPins + 1 |
342 local name = 'WorldPlanQuestMarker' .. NumPinFrames | 343 local name = 'WorldPlanQuestMarker' .. numOverlays |
343 --print('|cFF00FF00Creating', name) | 344 --print('|cFF00FF00Creating', name) |
344 pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin') | 345 pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin') |
345 | 346 |
346 pin:SetFrameStrata('HIGH') | 347 pin:SetFrameStrata('HIGH') |
347 pin.GetTypeInfo = function(frame, typeID) | 348 pin.GetTypeInfo = function(frame, typeID) |
348 return self:GetTypeInfo(typeID) | 349 return self:GetTypeInfo(typeID) |
349 end | 350 end |
350 pin:SetID(totalPins) | 351 pin:SetID(totalPins) |
351 NumPinFrames = NumPinFrames + 1 | 352 numOverlays = numOverlays + 1 |
352 --pin.iconBorder:SetVertexColor(0,0,0,1) | 353 --pin.iconBorder:SetVertexColor(0,0,0,1) |
353 end | 354 end |
354 pin.questID = questID | 355 pin.questID = questID |
355 pin.worldQuest = true | 356 pin.worldQuest = true |
356 pin.throttle = 1 | 357 pin.throttle = 1 |
379 | 380 |
380 | 381 |
381 pin.isActive = TQ_IsActive(questID) | 382 pin.isActive = TQ_IsActive(questID) |
382 pin:CheckFilterRules() | 383 pin:CheckFilterRules() |
383 rprint(pin:GetID(), pin.filtered, pin.used) | 384 rprint(pin:GetID(), pin.filtered, pin.used) |
384 pin:SetShown(pin.used) | |
385 | 385 |
386 return pin | 386 return pin |
387 end | 387 end |
388 | 388 |
389 -- remove from index and add it to the recycling heap | 389 -- remove from index and add it to the recycling heap |
518 pin:CheckFilterRules() | 518 pin:CheckFilterRules() |
519 | 519 |
520 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] | 520 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] |
521 print(pin.title, pin.dataLoaded and not pin.filtered, scaleFactor) | 521 print(pin.title, pin.dataLoaded and not pin.filtered, scaleFactor) |
522 pin:SetAnchor(nil, pin.x, pin.y, self.hostWidth, self.hostHeight, scaleFactor) | 522 pin:SetAnchor(nil, pin.x, pin.y, self.hostWidth, self.hostHeight, scaleFactor) |
523 | |
524 if pin.isNew then | |
525 pin:OnShow() | |
526 end | |
527 | |
528 | |
523 pin = tremove(db.UpdatedPins) | 529 pin = tremove(db.UpdatedPins) |
530 | |
524 end | 531 end |
525 end | 532 end |
526 | 533 |
527 -- create of update quest pins for a map and its underlying zones | 534 -- create of update quest pins for a map and its underlying zones |
528 function Module:UpdateWorldQuests (mapID) | 535 function Module:UpdateWorldQuests (mapID) |
605 print(' not visible, flag for later') | 612 print(' not visible, flag for later') |
606 self.isStale = true | 613 self.isStale = true |
607 return self:MarkAllPins() | 614 return self:MarkAllPins() |
608 end | 615 end |
609 if not db.Config.EnablePins then | 616 if not db.Config.EnablePins then |
617 numShown = 0 | |
610 return | 618 return |
611 end | 619 end |
612 | 620 |
613 | 621 |
614 wprint(' |cFF00FF88'..self:GetName()..':Refresh()|r') | 622 wprint(' |cFF00FF88'..self:GetName()..':Refresh()|r') |
616 scaleConstant = db.isContinentMap and 2 or 3 | 624 scaleConstant = db.isContinentMap and 2 or 3 |
617 for index, pin in pairs(db.QuestsByID) do | 625 for index, pin in pairs(db.QuestsByID) do |
618 pin.used = nil | 626 pin.used = nil |
619 end | 627 end |
620 | 628 |
621 if SpellCanTargetQuest() then | 629 canTargetQuests = SpellCanTargetQuest() |
622 self:UpdateBlizzButtons() | 630 self:UpdateAnchors() |
623 else | 631 |
624 self:UpdateAnchors(nil) | 632 -- calculate quests shown |
625 end | |
626 | |
627 --local showQuestPOI = db.Config.EnablePins | |
628 numShown = 0 | 633 numShown = 0 |
629 numLoaded = 0 | 634 numLoaded = 0 |
630 for questID, pin in pairs(db.QuestsByID) do | 635 for questID, pin in pairs(db.QuestsByID) do |
631 local oV = pin:IsShown() | 636 local oV = pin:IsShown() |
632 if pin.used then | 637 if pin.used then |
642 | 647 |
643 else | 648 else |
644 if oV == true then | 649 if oV == true then |
645 rprint('|cFFFF4400 -|r', questID, pin.title) | 650 rprint('|cFFFF4400 -|r', questID, pin.title) |
646 end | 651 end |
652 pin.hideReason = "Not used in map area " .. (db.currentMapID) | |
647 pin:HideFrames() | 653 pin:HideFrames() |
648 end | 654 end |
649 end | 655 end |
650 | 656 |
651 print(numShown, 'shown', numLoaded, 'loaded') | 657 print(numShown, 'shown', numLoaded, 'loaded') |
655 | 661 |
656 | 662 |
657 self.isStale = nil | 663 self.isStale = nil |
658 self.sizesDirty = nil | 664 self.sizesDirty = nil |
659 self.isZoomDirty = nil | 665 self.isZoomDirty = nil |
666 end | |
667 | |
668 function Module:RefreshIfChanged() | |
669 local scaleCheck = WorldMapDetailFrame:GetScale() | |
670 if scaleCheck ~= currentScale then | |
671 print('|cFF00FF88scale changed from', currentScale, 'to', scaleCheck) | |
672 self:Refresh() | |
673 currentScale = scaleCheck | |
674 elseif self.isStale then | |
675 print('|cFF00FF88isStale flag was set') | |
676 self:Refresh() | |
677 end | |
660 end | 678 end |
661 | 679 |
662 -- update visibility states of all pins | 680 -- update visibility states of all pins |
663 function Module:MarkAllPins(pins) | 681 function Module:MarkAllPins(pins) |
664 print(' |cFFFFFF00'..self:GetName()..':MarkAllPins()|r', pins) | 682 print(' |cFFFFFF00'..self:GetName()..':MarkAllPins()|r', pins) |
674 local pin = self:AcquirePin(info) | 692 local pin = self:AcquirePin(info) |
675 if not pin then | 693 if not pin then |
676 return | 694 return |
677 end | 695 end |
678 | 696 |
679 | |
680 --print(' |- ', pin.questID, pin.title) | 697 --print(' |- ', pin.questID, pin.title) |
681 rprint('|cFF00FF00update|r', pin.questID, pin.title) | 698 rprint('|cFF00FF00update|r', pin.questID, pin.title) |
682 | |
683 if x and y then | 699 if x and y then |
684 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] | 700 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] |
685 pin:SetFrameLevel(PinBaseIndex+pin:GetID()) | 701 pin:SetFrameLevel(PinBaseIndex+pin:GetID()) |
686 pin.owningFrame = WorldMapFrame | 702 pin.owningFrame = WorldMapFrame |
687 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor) | 703 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor) |
688 --tinsert(self.UsedPositions, pin) | 704 --tinsert(self.UsedPositions, pin) |
689 end | 705 end |
690 | 706 |
691 | |
692 if self:IsVisible() and (pin.isStale) then | 707 if self:IsVisible() and (pin.isStale) then |
693 pin:Refresh() | 708 pin:Refresh() |
694 end | 709 end |
710 | |
695 if mapID then | 711 if mapID then |
696 if not db.QuestsByZone[mapID] then | 712 if not db.QuestsByZone[mapID] then |
697 db.QuestsByZone[mapID] = {} | 713 db.QuestsByZone[mapID] = {} |
698 end | 714 end |
699 db.QuestsByZone[mapID][questID] = pin | 715 db.QuestsByZone[mapID][questID] = pin |
700 end | 716 end |
701 end | 717 end |
702 | 718 |
703 function Module:UpdateMap(taskInfo, mapID) | 719 -- Updates quest markers in taskInfo while associating them with the given map |
720 function Module:UpdateQuestsForMap(taskInfo, mapID) | |
704 rprint('Map', GetMapNameByID(mapID), GetMapNameByID(db.currentMapID)) | 721 rprint('Map', GetMapNameByID(mapID), GetMapNameByID(db.currentMapID)) |
705 for index, info in pairs(taskInfo) do | 722 for index, info in pairs(taskInfo) do |
706 self:UpdateQuestButton(info, mapID) | 723 self:UpdateQuestButton(info, mapID) |
707 end | 724 end |
708 end | 725 end |
709 | 726 |
727 -- Used to refresh the visible quest markers | |
710 function Module:UpdateAnchors () | 728 function Module:UpdateAnchors () |
711 | |
712 wipe(self.UsedPositions) | 729 wipe(self.UsedPositions) |
713 print(' |cFF00FF00'..self:GetName()..':UpdateAnchors()') | 730 print(' |cFF00FF00'..self:GetName()..':UpdateAnchors()') |
714 self.hostWidth, self.hostHeight = WorldMapPOIFrame:GetSize() | 731 self.hostWidth, self.hostHeight = WorldMapPOIFrame:GetSize() |
715 self.nudgeThrescholdX = 16/self.hostWidth | 732 self.nudgeThrescholdX = 16/self.hostWidth |
716 self.nudgeThrescholdY = 16/self.hostHeight | 733 self.nudgeThrescholdY = 16/self.hostHeight |
718 rprint('|cFF00FF00'..self:GetName()..':UpdateAnchors()') | 735 rprint('|cFF00FF00'..self:GetName()..':UpdateAnchors()') |
719 local mapFileName, textureHeight, textureWidth, isMicroDungeon, microDungeonMapName = GetMapInfo() | 736 local mapFileName, textureHeight, textureWidth, isMicroDungeon, microDungeonMapName = GetMapInfo() |
720 if isMicroDungeon then | 737 if isMicroDungeon then |
721 return | 738 return |
722 end | 739 end |
723 -- starts as true | 740 |
724 isDataLoaded = true | 741 isDataLoaded = true |
725 | |
726 numPins = 0 | |
727 local taskInfo = TQ_GetQuestsForPlayerByMapID(db.currentMapID) | 742 local taskInfo = TQ_GetQuestsForPlayerByMapID(db.currentMapID) |
728 if taskInfo then | 743 if taskInfo then |
729 self:UpdateMap(taskInfo, db.currentMapID) | 744 self:UpdateQuestsForMap(taskInfo, db.currentMapID) |
730 end | 745 end |
731 local numZones = MC_GetNumZones(db.currentMapID) | 746 local numZones = MC_GetNumZones(db.currentMapID) |
732 if numZones then | 747 if numZones then |
733 for i = 1, numZones do | 748 for i = 1, numZones do |
734 local mapAreaID = MC_GetZoneInfo(db.currentMapID, i) | 749 local mapAreaID = MC_GetZoneInfo(db.currentMapID, i) |
735 local taskInfo = TQ_GetQuestsForPlayerByMapID(mapAreaID, db.currentMapID) | 750 local taskInfo = TQ_GetQuestsForPlayerByMapID(mapAreaID, db.currentMapID) |
736 if taskInfo then | 751 if taskInfo then |
737 self:UpdateMap(taskInfo, mapAreaID) | 752 self:UpdateQuestsForMap(taskInfo, mapAreaID) |
738 end | 753 end |
739 end | 754 end |
740 end | 755 end |
741 end | 756 end |
742 | 757 |