diff WorldPlan.lua @ 33:be4db60219ca

WorldPlan: - Toggling a reward filter cancels out other types by default. Use right mouse to clear. - Fixed filter bar info falling out of sync after player-triggered world map updates. ClassPlan: - Available missions are now recorded; the mission list can be toggled between in-progress and available by clicking the heading.
author Nenue
date Wed, 02 Nov 2016 17:25:07 -0400
parents e8679ecb48d8
children 0100d923d8c3
line wrap: on
line diff
--- a/WorldPlan.lua	Tue Nov 01 10:48:50 2016 -0400
+++ b/WorldPlan.lua	Wed Nov 02 17:25:07 2016 -0400
@@ -2,77 +2,33 @@
 -- Created: 8/16/2016 8:19 AM
 -- %file-revision%
 
-local addonName, db = ...
-
-local ICON_UNKNOWN = "Interface\\ICONS\\inv_misc_questionmark"
-local ICON_MONEY = "Interface\\Buttons\\UI-GroupLoot-Coin-Up"
-
-local POI_BORDER_MASK = "Interface\\Minimap\\UI-Minimap-Background"
-local POI_BORDER_FILL = "Interface\\BUTTONS\\YELLOWORANGE64"
-local POI_BORDER_BLUE = "Interface\\BUTTONS\\GRADBLUE"
-local POI_BORDER_RED = "Interface\\BUTTONS\\RedGrad64"
-local POI_BORDER_YELLOW = "Interface\\BUTTONS\\YELLOWORANGE64"
-local POI_BORDER_GREEN = "Interface\\BUTTONS\\GREENGRAD64"
-
 WorldPlanCore = {
   defaults = {},
   modules = {},
-}
-WorldPlanQuestsMixin = {
+  FilterOptions = {},
+  UsedFilters = {},
   QuestsByZone = {},
   QuestsByID = {},
-  freePins = {},
+  TaskQueue = {},
 }
-WorldPlanPOIMixin = {}
-WorldPlanFilterPinMixin = setmetatable({ QuestsByID = {}, freePins = {} }, {__tostring = function() return 'QuestHandler' end})
-local WorldPlanFlightMapMixin = setmetatable({}, {__tostring = function() return 'FlightMapHandler' end})
-local WorldQuests = WorldPlanQuestsMixin
+local WorldPlan = WorldPlanCore
 
-
-local WorldPlan = WorldPlanCore
-local QuestPOI = WorldPlanPOIMixin
-local FilterPin = WorldPlanFilterPinMixin
+local print = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
 local WP_VERSION = "1.0"
-
-local db
-local print = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
-local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end
-local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or function() end
-local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or function() end
-local fbprint = DEVIAN_WORKSPACE and function(...) _G.print('FilterBar', ...) end or function() end
-
-local wipe, tremove, tinsert, pairs, floor, tContains = table.wipe, table.remove, table.insert, pairs, floor, tContains
-local TQ_GetQuestsForPlayerByMapID = C_TaskQuest.GetQuestsForPlayerByMapID -- This function is not yet documented
-local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID
-local TQ_IsActive = C_TaskQuest.IsActive
+local tinsert, pairs, floor = table.insert, pairs, floor
 local ITEM_QUALITY_COLORS = ITEM_QUALITY_COLORS
-local WorldMap_DoesWorldQuestInfoPassFilters = WorldMap_DoesWorldQuestInfoPassFilters
-local QuestMapFrame_IsQuestWorldQuest = QuestMapFrame_IsQuestWorldQuest
-local GameTooltip = GameTooltip
-local GetItemIcon = GetItemIcon
-
-
-local GetMapInfo, QuestPOIGetIconInfo = GetMapInfo, QuestPOIGetIconInfo
-local GetQuestTagInfo, HaveQuestData =  GetQuestTagInfo, HaveQuestData
-local GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, GetQuestLogRewardMoney = GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, GetQuestLogRewardMoney
-local GetQuestLogRewardInfo, GetQuestLogRewardCurrencyInfo, GetMoneyString = GetQuestLogRewardInfo, GetQuestLogRewardCurrencyInfo, GetMoneyString
-
+local BROKEN_ISLES_ID = 1007
 local GetCurrentMapAreaID, GetMapNameByID, GetSuperTrackedQuestID = GetCurrentMapAreaID, GetMapNameByID, GetSuperTrackedQuestID
-local MC_GetNumZones, MC_GetZoneInfo = C_MapCanvas.GetNumZones, C_MapCanvas.GetZoneInfo
-
 
 -- default color templates
-local ARTIFACT_COLOR = ITEM_QUALITY_COLORS[LE_ITEM_QUALITY_ARTIFACT]
-local MONEY_COLOR = {hex ='|cFFFFFF00', r=1, g=1, b=0}
-local COMMON_COLOR = ITEM_QUALITY_COLORS[LE_ITEM_QUALITY_COMMON]
 local DEFAULT_TYPE = {
   a = 1,
   r = 1, g = 1, b = 1,
   x = 0, y = 0,
   desaturated = true,
-  pinMask = POI_BORDER_MASK,
-  rewardMask = POI_BORDER_MASK,
-  texture = POI_BORDER_FILL,
+  pinMask = "Interface\\Minimap\\UI-Minimap-Background",
+  rewardMask = "Interface\\Minimap\\UI-Minimap-Background",
+  texture = "Interface\\BUTTONS\\YELLOWORANGE64",
   continent = {
     PinSize = 14,
     Border = 2,
@@ -113,71 +69,16 @@
   FadeWhileGrouped = true,
 }
 
--- Summary header structure
-
-local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD
-local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER
-local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT
-local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES
-local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS
-
-
-local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP
-local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE
-local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON
-local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION
-local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL
-WorldPlanCore.BrokenIsleID = BROKEN_ISLES_ID
-WorldPlanCore.FilterStyle = POI_FILTER_STYLE
-
-WorldPlanCore.FilterOptions = {}
-WorldPlanCore.UsedFilters = {}
-
-
 -- operating flags
 local superTrackedID
 local currentMapName
 local hasNewQuestPins
 local isContinentMap
-local numPins = 0
-local FilterInclusions = {rewardType = {}, worldQuestType = {}, factionID = {}}
-local NotificationTypes = {}
-local ZoneInfo = {}
-local SummaryHeaders = {}
-
-local FreePins = {}
-local NumPinFrames = 1
-
 local hasPendingQuestData
 local notifyPlayed
 local scanner, wmtt, WorldMapPOIFrame
 
 
-local tasksQueue = {}
-local function OnNext (func)
-  if #tasksQueue == 0 then
-    _G.WorldPlan:SetScript('OnUpdate', function()
-      local func = tremove(tasksQueue, 1)
-      if func then
-        func()
-      end
-      if #tasksQueue == 0 then
-        _G.WorldPlan:SetScript('OnUpdate', nil)
-      end
-    end)
-  end
-  print('inserting task #', #tasksQueue+1, func)
-  tinsert(tasksQueue, func)
-end
-
--- update a masked texture without messing up its blending mask
-local SetMaskedTexture = function(region, file, mask)
-  mask = mask or POI_BORDER_MASK
-  region:SetMask(nil)
-  region:SetTexture(file)
-  region:SetMask(mask)
-end
-
 -- tracking menu toggler
 local DropDown_OnClick = function(self)
   local key = self.value
@@ -188,7 +89,7 @@
       WorldPlanData[key] = true
     end
   end
-  WorldPlan:Refresh()
+  _G.WorldPlan:Refresh()
 end
 
 function WorldPlan:print(...)
@@ -238,9 +139,6 @@
   end
 
   WorldPlan = self
-  scanner = _G.WorldPlanTooltip
-  wmtt = _G.WorldMapTooltip
-  WorldMapPOIFrame = _G.WorldMapPOIFrame
 
   WorldPlan:print('v'..WP_VERSION)
 
@@ -260,12 +158,11 @@
   if self.isStale then
     self:Refresh()
   end
-
 end
 
 function WorldPlan:OnEvent (event, ...)
   print()
-  print(event, self.initialized)
+  print(event, 'init:', self.initialized)
   if event == 'ADDON_LOADED' then
     local addon = ...
     if addon == "Blizzard_FlightMap" then
@@ -276,20 +173,49 @@
     if IsLoggedIn() and not self.initialized then
       self:Setup()
     end
-  elseif event == 'WORLD_MAP_UPDATE' then
-    self.currentMapID = GetCurrentMapAreaID()
-    print('|cFFFF4400currentMapID =', self.currentMapID)
-    self:Refresh()
   else
+    if event == 'WORLD_MAP_UPDATE' then
+      self.currentMapID = GetCurrentMapAreaID()
+      self.isContinentMap = (self.currentMapID == BROKEN_ISLES_ID)
+      print('|cFFFF4400currentMapID =', self.currentMapID)
+      --self.isStale = true
+    end
+
     for i, module in ipairs(self.modules) do
       if module.OnEvent then
-        print('forwarding to', tostring(module))
+        print('  |cFF0088FF'..module:GetName() .. ':OnEvent()|r')
         module:OnEvent(event, ...)
       end
     end
   end
 end
 
+function WorldPlanCore:OnNext(func)
+  tinsert(self.TaskQueue, func)
+end
+
+function WorldPlanCore:OnUpdate()
+  if #self.TaskQueue >= 1 then
+  local func = tremove(self.TaskQueue, 1)
+  if func then
+    func()
+  end
+
+  end
+
+  if self.isStale then
+    print('|cFF00FF00pushing global update')
+    self.isStale = nil
+    self:Refresh()
+  else
+    for i, module in ipairs(self.modules) do
+      if module.isStale then
+        print('|cFF00FF00internal '..module:GetName()..':Refresh()|r')
+        module:Refresh()
+      end
+    end
+  end
+end
 
 function WorldPlan:Setup ()
   if not WorldPlanData then
@@ -323,6 +249,16 @@
   self.initialized = true
 
   hooksecurefunc("UIDropDownMenu_Initialize", self.OnDropDownInitialize)
+
+  hooksecurefunc("WorldMapTrackingOptionsDropDown_OnClick", function(button)
+    print("|cFF0088FFWorldMapTrackingOptionsDropDown_OnClick|r")
+    local value = button.value
+    if (value == "worldQuestFilterOrderResources" or value == "worldQuestFilterArtifactPower" or
+        value == "worldQuestFilterProfessionMaterials" or value == "worldQuestFilterGold" or
+        value == "worldQuestFilterEquipment") then
+      self:Refresh(true)
+    end
+  end)
 end
 
 function WorldPlan:AddTypeInfo(owner, id, info)
@@ -398,30 +334,9 @@
   end
 
   for i, module in ipairs(self.modules) do
-    if module.Reset then
-      print(module, 'Reset()')
-      module:Reset()
-    end
-  end
-
-  for i, module in ipairs(self.modules) do
     if module.Refresh then
-      print(module, 'Refresh()')
-      module:Refresh()
-    end
-  end
-
-  for i, module in ipairs(self.modules) do
-    if module.Cleanup then
-      print(module, 'Cleanup()')
-      module:Cleanup()
-    end
-  end
-end
-function WorldPlan:UpdateAnchors ()
-  for i, module in ipairs(self.modules) do
-    if module.UpdateAnchors then
-      module:UpdateAnchors()
+      print('|cFF00FF00external '..module:GetName()..':Refresh()|r')
+      module:Refresh(forced)
     end
   end
 end
@@ -494,345 +409,6 @@
 --------------------------------------------------------------------------------------------------------------------
 --------------------------------------------------------------------------------------------------------------------
 
-local PinBaseIndex = 1600
-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
-
--- maps where we do our own anchors
-local CONTINENT_MAPS = { [BROKEN_ISLES_ID] = BROKEN_ISLES_ID, }
-local WORLD_QUEST_MAPS = { [DALARAN_ID] = 'Dalaran70',  [AZSUNA_ID] = 'Azsuna',  [VALSHARAH_ID] = "Val'sharah",
-  [HIGHMOUNTAIN_ID] = 'Highmountain', [STORMHEIM_ID] = 'Stormheim',  [SURAMAR_ID] = 'Suramar',  [EOA_ID] = 'EyeOfAszhara', }
-
-function WorldQuests:Setup()
-
-
-  for mapID, mapName in pairs(WORLD_QUEST_MAPS) do
-    self.QuestsByZone[mapID] = {}
-  end
-
-
-  -- refresh positions any time blizzard does so (i.e. mousewheel zoom)
-  hooksecurefunc("WorldMapScrollFrame_ReanchorQuestPOIs", function()
-    self:Refresh(true)
-  end)
-
-  -- hide the original world quest POIs
-  hooksecurefunc("WorldMap_UpdateQuestBonusObjectives", function()
-    for i = 1, NUM_WORLDMAP_TASK_POIS do
-      local button = _G['WorldMapFrameTaskPOI'..i]
-      if button and button.worldQuest then
-        button:Hide()
-      end
-    end
-  end)
-
-  hooksecurefunc("WorldMapTrackingOptionsDropDown_OnClick", function(button)
-    print("|cFF0088FFWorldMapTrackingOptionsDropDown_OnClick|r")
-    local value = button.value
-    if (value == "worldQuestFilterOrderResources" or value == "worldQuestFilterArtifactPower" or
-        value == "worldQuestFilterProfessionMaterials" or value == "worldQuestFilterGold" or
-        value == "worldQuestFilterEquipment") then
-      self:Refresh(true)
-    end
-  end)
-end
-
-local defaults = {}
-function WorldQuests:OnLoad()
-  print('|cFF00FF88'..self:GetName()..':OnLoad')
-
-  WorldPlan:AddHandler(self, defaults)
-
-  local rgbWhite = {1, 1, 1}
-  WorldPlan:AddTypeInfo(self, REWARD_REAGENT, { r = 0, g = 1, b = 1 })
-  WorldPlan:AddTypeInfo(self, REWARD_ARTIFACT_POWER, { r = 1, g = .25, b = .5, hasNumeric = true, numberRGB = rgbWhite })
-  WorldPlan:AddTypeInfo(self, REWARD_GEAR, { r = .1, g = .2, b = 1 })
-  WorldPlan:AddTypeInfo(self, REWARD_CURRENCY, { r = 1, g = 1, b = 0, hasNumeric = true, numberRGB = {1,1,0}, })
-  WorldPlan:AddTypeInfo(self, REWARD_CASH, { r = 0, g = 0, b = 0, })
-
-  for areaID, fileName in pairs(WORLD_QUEST_MAPS) do
-    self.QuestsByZone[areaID] = {}
-  end
-
-  self:RegisterEvent('QUEST_LOG_UPDATE')
-  self:RegisterEvent('WORLD_QUEST_COMPLETED_BY_SPELL')
-  self:RegisterEvent('SKILL_LINES_CHANGED')
-
-
-end
-
-function WorldQuests:OnEvent (event, ...)
-  local print = wqprint
-  print('|cFFFFFF00'..self:GetName()..':OnEvent()'..event..'|r', GetTime(), ...)
-  if event == 'QUEST_LOG_UPDATE' then
-    local questID, added = ...
-    if questID and added then
-      local questPOI = self:AcquirePin(questID)
-      self.hasUpdate, self.isPending = questPOI:RefreshData()
-    else
-      self:RefreshData()
-    end
-    print('WorldMapFrame', WorldMapFrame:IsVisible(), 'hasUpdates:', self.hasUpdate)
-  elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then
-    local questID = ...
-    if questID and self.QuestsByID[questID] then
-      self:ReleasePin(self.QuestsByID[questID])
-    end
-  elseif event == 'SKILL_LINES_CHANGED' then
-    self.hasUpdate = true
-  end
-end
-
-function WorldQuests:OnUpdate()
-  if self.hasUpdate then
-    wqprint('|cFF00FF00pushing update')
-    self:Refresh(true)
-  end
-end
-
-local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation
-function WorldQuests:AcquirePin (questID, mapID)
-  local pin = self.QuestsByID[questID]
-  local isNew = false
-  if not pin then
-    isNew = true
-    local numFree = #self.freePins
-    if numFree >= 1 then
-      pin = tremove(self.freePins, numFree)
-      --print('|cFF00FF00Re-using', pin:GetName())
-    else
-      local name = 'WorldPlanQuestMarker' .. NumPinFrames
-      --print('|cFF00FF00Creating', name)
-      pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin')
-
-      pin:SetFrameStrata('HIGH')
-      pin.GetTypeInfo = function(frame, typeID)
-        return self:GetTypeInfo(typeID)
-      end
-      NumPinFrames = NumPinFrames + 1
-      --pin.iconBorder:SetVertexColor(0,0,0,1)
-    end
-    pin:SetID(questID)
-    pin.isNew = true
-    pin.currentWidth = nil
-
-    -- used by TaskPOI_x scripts
-    pin.questID = questID
-    pin.worldQuest = true
-
-    self.QuestsByID[questID] = pin
-  else
-    --print('|cFF00FF00Using', pin:GetName())
-  end
-  mapID = mapID or TQ_GetQuestZoneID(questID)
-  self.QuestsByZone[mapID][questID] = pin
-
-  return pin, isNew
-end
-
--- remove from index and add it to the recycling heap
-function WorldQuests:ReleasePin (pin)
-
-  local id = pin.questId
-  if id then
-    self.QuestsByID[id] = nil
-    for i, zone in pairs(self.QuestsByZone) do
-      print('-', i, zone[i])
-      zone[id] = nil
-    end
-  end
-  pin:Hide()
-  pin:ClearAllPoints()
-  tinsert(self.freePins, pin)
-  print('|cFFFF4400Clearing out', pin:GetName(),id)
-end
-
--- create of update quest pins for a map and its underlying zones
-function WorldQuests:RefreshData (mapID)
-  local print = wqprint
-  mapID = mapID or GetCurrentMapAreaID()
-  superTrackedID = GetSuperTrackedQuestID()
-  if not mapID then
-    -- info not available yet
-    return
-  end
-
-  print('|cFF00FF88'..self:GetName()..':RefreshData()|r', 'map:', mapID, 'realMap:', GetCurrentMapAreaID())
-
-  if mapID == BROKEN_ISLES_ID then
-    self.hasUpdate = false
-    print('|cFF00FFFFContinent:|r', mapID, GetMapNameByID(mapID), superTrackedID)
-    self.fullSearch = true
-    for i = 1, MC_GetNumZones(mapID) do
-      local submapID, name, depth = MC_GetZoneInfo(mapID, i)
-      self:RefreshData(submapID)
-    end
-    self.fullSearch = nil
-  elseif self.QuestsByZone[mapID] then
-    local taskInfo = TQ_GetQuestsForPlayerByMapID(mapID)
-    local numQuests = 0
-    if taskInfo and #taskInfo >= 1 then
-      print('|cFF00FFFF  Zone:|r', mapID, GetMapNameByID(mapID), #taskInfo)
-      wipe(self.QuestsByZone[mapID])
-      ZoneInfo[mapID] = taskInfo
-      qprint('|cFFFF4400START of', GetMapNameByID(mapID))
-      for taskID, info in pairs(taskInfo) do
-        local questID = info.questId
-        info.mapID = mapID
-        local questPOI = self:AcquirePin(questID, mapID)
-        local hasUpdate, isPending = questPOI:RefreshData(info)
-        self.hasUpdate = (self.hasUpdate or hasUpdate)
-        self.isPending = (self.isPending or isPending)
-        numQuests = numQuests + 1
-      end
-      qprint('|cFFFF4400END of', GetMapNameByID(mapID))
-    end
-  end
-
-  if not self.fullSearch then
-    print('  hasUpdate:', self.hasUpdate, 'isPending:', self.isPending, 'timer:', (self.OnNext and 'waiting' or ''))
-
-  end
-
-end
-
-function WorldQuests:Refresh(forced)
-  local print = wqprint
-  print('|cFF00FF88'..self:GetName()..':Refresh()|r')
-  if not WorldMapPOIFrame:IsVisible() then
-    return
-  end
-  if forced then
-    self:Reset()
-  end
-  self:UpdateAnchors()
-
-  if forced then
-    self:Cleanup ()
-  end
-end
-
--- prepares elements for a map update
-function WorldQuests:Reset ()
-  local print = wqprint
-  print('|cFF00FF88'..self:GetName()..':Reset()|r')
-  for questID, pin in pairs(self.QuestsByID) do
-    pin.used = nil
-  end
-end
-
--- update visibility states of all pins
-function WorldQuests:UpdateAnchors (submapID)
-  local print = wqprint
-  local db = WorldPlan.db
-  local mapFileName, textureHeight, textureWidth, isMicroDungeon, microDungeonMapName = GetMapInfo()
-  if isMicroDungeon then
-    return
-  end
-
-  local currentMap = GetCurrentMapAreaID()
-  local submapID = submapID or currentMap
-
-  if submapID == BROKEN_ISLES_ID and (not db.DisplayContinentPins) then
-    print('not updating map for reasons')
-    return
-  end
-  print('|cFF88FF00'..self:GetName()..':UpdateAnchors|r', submapID, GetMapNameByID(submapID), 'pin count:', numPins)
-  local numZones = MC_GetNumZones(submapID)
-  if numZones then
-    for i = 1, numZones do
-      local subMapID = MC_GetZoneInfo(submapID, i)
-      self:UpdateAnchors(subMapID)
-    end
-  end
-  local pins = self.QuestsByZone[submapID]
-
-  if pins then
-    local hostFrame = WorldMapPOIFrame
-    local mapWidth, mapHeight = hostFrame:GetSize()
-    for questID, pin in pairs(pins) do
-      pin:IsShowable()
-      if pin.used then
-        pin.hasUpdate = true
-        pin:SetFrameLevel(PinBaseIndex+ (pin.whiteListed and 200 or 0) +numPins)
-        print('level', PinBaseIndex+ (pin.whiteListed and 200 or 0) +numPins)
-        pin:SetAnchor(WorldMapPOIFrame, currentMap, mapWidth, mapHeight)
-        numPins = numPins + 1
-      end
-    end
-  end
-end
-
--- shows, animates, or hides pins based on their current visibility flags
-local debug_show = {}
-local debug_animate = {}
-local debug_hide = {}
-function WorldQuests:Cleanup ()
-  local print = wqprint
-  local showQuestPOI = db.EnablePins
-  print('|cFFFFFF00'..tostring(self)..':Cleanup()|r')
-  local mapID = GetCurrentMapAreaID()
-  isContinentMap = (mapID == BROKEN_ISLES_ID)
-
-  wipe(debug_show)
-  wipe(debug_animate)
-  wipe(debug_hide)
-  -- continent or zone sizing
-  local fadeGrouped = (db.FadeWhileGrouped and IsInGroup())
-
-  numPins = 0
-  for questID, pin in pairs(self.QuestsByID) do
-    -- can we show it?
-    if showQuestPOI and (pin.used) then
-
-      pin.hasUpdate = true
-      if fadeGrouped then
-        pin:SetAlpha(0.25)
-      else
-        pin:SetAlpha(1)
-      end
-      -- is it a new quest?
-      if pin.isNew then
-        if not pin.isAnimating then
-          pin.isAnimating = true
-          OnNext(function()
-            pin:ShowNew()
-          end)
-          if not notifyPlayed then
-            for k,v in pairs(NotificationTypes) do
-              if v[pin[k]] then
-                notifyPlayed = true
-                PlaySoundKitID(23404)
-              end
-            end
-          end
-          tinsert(debug_animate,questID)
-        else
-
-          print('animating? ', questID, 'filtered:', pin.filtered)
-        end
-        -- trap new but animating pins here
-      else
-        -- hard show existing pin
-        print('refresh #', questID, 'filtered:', pin.filtered, 'hasUpdate', pin.hasUpdate)
-        pin:Show()
-        tinsert(debug_show,questID)
-      end
-    else
-      if pin:IsShown() then
-        tinsert(debug_hide,questID)
-      end
-      pin.isAnimating = nil
-      pin.FadeIn:Stop()
-      pin:Hide()
-    end
-  end
-  print('   adding:', table.concat(debug_animate, ',' ))
-  print('  refresh:', table.concat(debug_show, ',' ))
-  print('  hiding:', table.concat(debug_hide, ',' ))
-  hasNewQuestPins = nil
-  notifyPlayed = nil
-  self.hasUpdate = nil
-end
 
 -- data provider manipulations for the taxi map
 WorldPlan.OnFlightMapLoaded = function()
@@ -871,129 +447,10 @@
 
 
 
-local throttle = 0
-local tooltip = CreateFrame ("GameTooltip", "VeneerWorldQuestsScanner", nil, "GameTooltipTemplate")
-local tooltipLine1 = _G['VeneerWorldQuestsScannerTextLeft1']
-local tooltipLine3 = _G['VeneerWorldQuestsScannerTextLeft3']
-local GetTime, mod = GetTime, mod
 
 
 
 
-function WorldQuests:FilterCheckByID(questID)
-  local pin = WorldQuests:GetPinByQuestID(questID)
-  return pin:IsShowable()
-end
-
-
-function QuestPOI:IsShowable ()
-  local print = wqprint
-  local db = WorldPlan.db
-  local qType = self.worldQuestType
-  local rType = self.rewardType
-  self.filtered = nil
-  self.used = true
-
-  print('  |cFFFF4400IsShowable()|r', self.title)
-
-  self.questId  = self:GetID()
-  if not (WorldMap_DoesWorldQuestInfoPassFilters(self, false, true)) then
-    self.filtered = true
-  end
-
-  for filterKey, value in pairs(WorldPlan.UsedFilters) do
-    if self[filterKey] ~= value then
-      self.filtered = true
-    end
-  end
-
-  if not TQ_IsActive(self.questID) then
-    self.used = nil
-  elseif qType == LE_QUEST_TAG_TYPE_PROFESSION then
-    if not (db.ShowAllProfessionQuests or (self.tradeskillLineIndex and GetProfessionInfo(self.tradeskillLineIndex))) then
-      self.used = nil
-    end
-  end
-  return self.used, self.filtered
-end
-
-function QuestPOI:UpdateTimer (timeLeft, timeType)
-  print('|cFF0088FFUpdatePinTimer()|r')
-end
-
---- Fixes icons upon size update
-function QuestPOI:UpdateSize (style, subStyle)
-  style = style or self.style
-  subStyle = subStyle or self.subStyle
-
-  --qprint('|cFF00FF88'..self:GetName()..'|r:UpdateSize()', style, subStyle)
-
-  self.currentWidth = subStyle.PinSize
-  self.borderSize = subStyle.Border
-  self.trackingBorderSize = subStyle.TrackingBorder
-  self.tagSize = subStyle.TagSize
-  self.TimeleftStage = subStyle.TimeleftStage
-  self.NoIcon = subStyle.NoIcon
-
-
-  self:SetSize(self.currentWidth, self.currentWidth)
-
-  local icon = self.icon
-  local iconBorder = self.iconBorder
-  local trackingBorder = self.supertrackBorder
-  local tag = self.tagIcon
-  local pinMask = style.pinMask
-  local rewardMask = style.rewardMask
-
-  if self.NoIcon then
-    self.icon:Hide()
-  else
-    self.icon:Show()
-    icon:SetMask(nil)
-    icon:SetMask(rewardMask)
-    icon:SetTexture(self.icon:GetTexture())
-  end
-  iconBorder:SetMask(nil)
-  trackingBorder:SetMask(nil)
-
-
-  local borderWidth = self.borderSize
-  local trackingWidth = self.trackingBorderSize
-
-  iconBorder:ClearAllPoints()
-  iconBorder:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', -borderWidth + (style.x or 0), -borderWidth + (style.y or 0))
-  iconBorder:SetPoint('TOPRIGHT', self, 'TOPRIGHT', borderWidth + (style.x or 0), borderWidth + (style.y or 0))
-
-  trackingBorder:ClearAllPoints()
-  trackingBorder:SetPoint('BOTTOMLEFT', iconBorder, 'BOTTOMLEFT', -trackingWidth, -trackingWidth)
-  trackingBorder:SetPoint('TOPRIGHT', iconBorder, 'TOPRIGHT', trackingWidth, trackingWidth)
-
-  if self.tagSize then
-    tag:Show()
-    tag:ClearAllPoints()
-    tag:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', borderWidth, -borderWidth)
-  else
-    tag:Hide()
-  end
-
-  --qprint('using mask:', mask, self.name )
-  iconBorder:SetMask(pinMask)
-  trackingBorder:SetMask(pinMask)
-
-
-end
-
-
-
---%debug%
-local SetTimedCallbackForAllPins = function(seconds, callback)
-  C_Timer.After(seconds, function()
-    for id, pin in pairs(WorldPlanQuests.QuestsByID) do
-      callback(pin)
-    end
-  end)
-end
-
 SLASH_WORLDPLAN1 = "/worldplan"
 SLASH_WORLDPLAN2 = "/wp"
 SlashCmdList.WORLDPLAN = function()