comparison WorldQuests.lua @ 66:e43e10c5576b

Update for Legion Patch 7.2 - Massive performance improvements through largely re-written update routines. - Removed AP token caching until reliable mechanisms for detecting AK shifts can be resolved.
author Nenue
date Thu, 30 Mar 2017 02:32:44 -0400
parents 02f1d3bce558
children 96183f981acb
comparison
equal deleted inserted replaced
65:02f1d3bce558 66:e43e10c5576b
32 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD 32 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD
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 local SCALE_FACTORS = {
38 0.25, 0.7, 1
39 }
37 40
38 local numShown = 0 41 local numShown = 0
39 local numLoaded = 0 42 local numLoaded = 0
40 local isDataLoaded 43 local isDataLoaded
41 local numPins = 0 44 local numPins = 0
42 local NumPinFrames = 1 45 local NumPinFrames = 1
46 local scaleConstant = 1
43 Module.TasksByID = {} 47 Module.TasksByID = {}
44 48
45 --%debug% 49 --%debug%
46 local SetTimedCallbackForAllPins = function(seconds, callback) 50 local SetTimedCallbackForAllPins = function(seconds, callback)
47 C_Timer.After(seconds, function() 51 C_Timer.After(seconds, function()
50 end 54 end
51 end) 55 end)
52 end 56 end
53 57
54 function Module:OnUpdate(sinceLast) 58 function Module:OnUpdate(sinceLast)
55 if self.filtersDirty or self.isStale then 59 if self.filtersDirty or self.isStale or self.isZoomDirty then
56 self:Refresh() 60 self:Refresh()
57 end 61 end
58 end 62 end
59 63
60 local InternalDoRefresh = function (self) 64 local InternalDoRefresh = function (self)
150 print('|cFFFF4400'..self:GetName()..':OnLoad()') 154 print('|cFFFF4400'..self:GetName()..':OnLoad()')
151 155
152 self:SetParent(WorldMapPOIFrame) 156 self:SetParent(WorldMapPOIFrame)
153 WorldPlan:AddHandler(self, defaults) 157 WorldPlan:AddHandler(self, defaults)
154 158
155 local rgbWhite = {1, 1, 1 }
156 WorldPlan:AddTypeInfo(self, REWARD_UNKNOWN, { r = 0, g = 0, b = 0})
157 WorldPlan:AddTypeInfo(self, REWARD_REAGENT, { r = 0, g = 1, b = .5 })
158 WorldPlan:AddTypeInfo(self, REWARD_ARTIFACT_POWER, { r = 1, g = .25, b = .5, hasNumeric = true, numberRGB = rgbWhite })
159 WorldPlan:AddTypeInfo(self, REWARD_GEAR, { r = .3, g = .7, b = 1 })
160 WorldPlan:AddTypeInfo(self, REWARD_CURRENCY, { r = 1, g = 1, b = 0, hasNumeric = true, numberRGB = {1,1,0}, })
161 WorldPlan:AddTypeInfo(self, REWARD_CASH, { r = 1, g = 1, b = .32, pinMask = false, rewardMask = false })
162
163 for areaID, fileName in pairs(WORLD_QUEST_MAPS) do 159 for areaID, fileName in pairs(WORLD_QUEST_MAPS) do
164 db.QuestsByZone[areaID] = {} 160 db.QuestsByZone[areaID] = {}
165 end 161 end
166 162
167 -- WORLD_MAP_UPDATE and PLAYER_ENTERING_WORLD are passed down from a higher level 163 -- WORLD_MAP_UPDATE and PLAYER_ENTERING_WORLD are passed down from a higher level
288 local dataLoaded = pin:GetData() 284 local dataLoaded = pin:GetData()
289 isDataLoaded = (isDataLoaded and dataLoaded) 285 isDataLoaded = (isDataLoaded and dataLoaded)
290 WorldPlan.dataFlush = true 286 WorldPlan.dataFlush = true
291 end 287 end
292 288
289
293 pin.isActive = TQ_IsActive(questID) 290 pin.isActive = TQ_IsActive(questID)
294
295 pin:CheckFilterRules() 291 pin:CheckFilterRules()
296 rprint(pin:GetID(), pin.filtered, pin.used) 292 rprint(pin:GetID(), pin.filtered, pin.used)
297 293
298 return pin 294 return pin
299 end 295 end
428 if not mapID then 424 if not mapID then
429 -- info not available yet 425 -- info not available yet
430 return 426 return
431 end 427 end
432 428
429 local scalingConstant = 1
430 local style = DEFAULT_STYLE
431 if self.dataLoaded then
432 style = REWARD_TYPE_STYLES[self.rewardType]
433 scalingConstant = db.isContinentMap and 2 or 3
434 end
435
436 local pinScale = SCALE_FACTORS[scalingConstant]
437 print(pinScale)
438 self:SetScale(pinScale)
439 self.Overlay:SetScale(pinScale)
433 440
434 print('|cFF00FF88'..self:GetName()..':UpdateWorldQuests()|r', 'map:', mapID, 'realMap:', db.currentMapID) 441 print('|cFF00FF88'..self:GetName()..':UpdateWorldQuests()|r', 'map:', mapID, 'realMap:', db.currentMapID)
435 442
436 443
437 self.isStale = nil 444 self.isStale = nil
492 self.isStale = true 499 self.isStale = true
493 return self:MarkAllPins() 500 return self:MarkAllPins()
494 end 501 end
495 wprint(' |cFF00FF88'..self:GetName()..':Refresh()|r') 502 wprint(' |cFF00FF88'..self:GetName()..':Refresh()|r')
496 503
504 scaleConstant = db.isContinentMap and 2 or 3
497 for index, pin in pairs(db.QuestsByID) do 505 for index, pin in pairs(db.QuestsByID) do
498 pin.used = nil 506 pin.used = nil
499 end 507 end
500 508
501 if SpellCanTargetQuest() then 509 if SpellCanTargetQuest() then
535 end 543 end
536 544
537 545
538 self.isStale = nil 546 self.isStale = nil
539 self.sizesDirty = nil 547 self.sizesDirty = nil
548 self.isZoomDirty = nil
540 end 549 end
541 550
542 -- update visibility states of all pins 551 -- update visibility states of all pins
543 function Module:MarkAllPins(pins) 552 function Module:MarkAllPins(pins)
544 print(' |cFFFFFF00'..self:GetName()..':MarkAllPins()|r', pins) 553 print(' |cFFFFFF00'..self:GetName()..':MarkAllPins()|r', pins)
559 568
560 print('~ ', pin.mapID, pin.questID, pin.title) 569 print('~ ', pin.mapID, pin.questID, pin.title)
561 rprint('|cFF00FF00update|r', pin.questID, pin.title) 570 rprint('|cFF00FF00update|r', pin.questID, pin.title)
562 571
563 if x and y then 572 if x and y then
573 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
564 pin:SetFrameLevel(PinBaseIndex+pin:GetID()) 574 pin:SetFrameLevel(PinBaseIndex+pin:GetID())
565 pin.owningFrame = WorldMapFrame 575 pin.owningFrame = WorldMapFrame
566 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight) 576 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor)
567 --tinsert(self.UsedPositions, pin) 577 --tinsert(self.UsedPositions, pin)
568 end 578 end
569 if self:IsVisible() and pin.isStale then 579
580
581 if self:IsVisible() and (pin.isStale) then
570 pin:Refresh() 582 pin:Refresh()
571 end 583 end
572 if mapID then 584 if mapID then
573 if not db.QuestsByZone[mapID] then 585 if not db.QuestsByZone[mapID] then
574 db.QuestsByZone[mapID] = {} 586 db.QuestsByZone[mapID] = {}