changeset 78:fadf00b437fb v1.4.1

- Fixed pins not being removed upon completion - Fixed animation stuttering
author Nenue
date Mon, 10 Apr 2017 13:14:05 -0400
parents d55ceee94714
children 9be69336c0b3
files QuestPOI.lua WorldQuests.lua
diffstat 2 files changed, 55 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/QuestPOI.lua	Mon Apr 10 07:34:29 2017 -0400
+++ b/QuestPOI.lua	Mon Apr 10 13:14:05 2017 -0400
@@ -259,7 +259,7 @@
   end
   WorldMap_HijackTooltip(self.owningFrame);
   self:SetFrameLevel(pinBaseIndex+100)
-  self.Overlay:SetFrameLevel(pinBaseIndex+101)
+  self.Overlay:SetFrameLevel(overlayBaseIndex+100)
 
   if previousHighlight then
     previousHighlight:SetFrameLevel(pinBaseIndex+previousHighlight:GetID())
@@ -573,7 +573,7 @@
 
 function QuestPOI:OnAnimStart()
   --qprint('|cFFFFFF00OnAnimStart(|r'..self:GetID()..'|cFFFFFF00)|r', self.fadeEvent)
-  self.isAnimating = true
+  self:Refresh('FADE_IN_START')
   self.isNew = nil
 end
 
@@ -587,9 +587,7 @@
   if self.dataLoaded then
     --qprint('|cFFFFFF00TryToFade('..self:GetID()..'|cFFFFFF00)|r', event)
     self:SetAlpha(0)
-    self:Refresh(event)
     self.FadeIn.FadeIn:SetToAlpha(db.PinAlpha)
-    self.isStale = true
     self.FadeIn:Play()
   else
 
@@ -598,7 +596,6 @@
 end
 
 function QuestPOI:OnAnimStop()
-  self.isAnimating = nil
   self:SetAlpha(db.PinAlpha)
 end
 
@@ -606,19 +603,28 @@
 
   if self.isNew then
     self:TryToFade('POI_ONSHOW_NEW')
-  else
-    if not self.isAnimating then
-      --print('|cFF00FF00Alpha correction')
-      self:SetAlpha(db.PinAlpha) -- fix stuck alpha
-    end
+  elseif not self.FadeIn:IsPlaying() then
+    print('|cFF00FF00Alpha correction')
+    self:SetAlpha(db.PinAlpha) -- fix stuck alpha
     if self.isStale then
       --print('|cFF00FF00refresh on show')
       self:Refresh('POI_ONSHOW_STALE')
     end
   end
+  self:RegisterEvent('QUEST_LOG_UPDATE')
   self:ShowFrames()
 end
 
+function QuestPOI:OnEvent(event)
+  if not TQ_IsActive(self.questID) then
+
+    self:UnregisterEvent('QUEST_LOG_UPDATE')
+
+    self.hideReason = 'Hiding self because quest is inactive.'
+    self:SetShown(false)
+  end
+end
+
 function QuestPOI:OnHide()
   --DEFAULT_CHAT_FRAME:AddMessage('|cFFFFFF00'..self:GetName()..'|r:OnHide()')
   self:HideFrames()
@@ -644,6 +650,10 @@
   if owner then
     self:SetParent(owner)
     self.Overlay:SetParent(owner)
+    self:SetFrameStrata('HIGH')
+    self:SetFrameLevel(pinBaseIndex + self:GetID())
+    self.Overlay:SetFrameStrata('HIGH')
+    self.Overlay:SetFrameLevel(overlayBaseIndex + self:GetID())
     self.isStale = true
   else
     owner = self:GetParent()
@@ -766,6 +776,7 @@
 
 end
 
+-- Non-hieriarchical display states, checked separately from used/filtered states
 function QuestPOI:GetCriteriaState()
   local isCriteria, isBounty, isSpellTarget
   if self.factionID then
@@ -981,41 +992,44 @@
 function QuestPOI:CheckFilterRules ()
   local print = qprint
   local qType = self.worldQuestType
-  local filtered
-  local canShow = TQ_IsActive(self.questID)
-
+  if not TQ_IsActive(self.questID) then
+    self.hideReason = 'Filter check ended because quest is inactive.'
+    self.used = nil
+    self:SetShown(false)
+    return
+  end
 
   if qType == LE_QUEST_TAG_TYPE_PROFESSION then
     if not(self.isKnownProfession or db.Config.ShowAllProfessionQuests) then
-      canShow = nil
+      self.hideReason = 'Failed profession check.'
+      self.used = nil
+      self:SetShown(false)
+      return
     end
   end
-  if canShow then
-    for filterKey, value in pairs(db.UsedFilters) do
-      if self[filterKey] ~= value then
-        if not self.filtered then
-          print('|cFFFF4400filtering', filterKey, value, '~=', self[filterKey], self.title)
-        end
 
-        filtered = true
+  local filtered
+  for filterKey, value in pairs(db.UsedFilters) do
+    if self[filterKey] ~= value then
+      if not self.filtered then
+        print('|cFFFF4400filtering', filterKey, value, '~=', self[filterKey], self.title)
       end
+      filtered = true
     end
-    if self.rewardType  and cvar_check[self.rewardType] then
-      if not GetCVarBool(cvar_check[self.rewardType])  then
-        filtered = true
-      end
+  end
+  if self.rewardType  and cvar_check[self.rewardType] then
+    if not GetCVarBool(cvar_check[self.rewardType])  then
+      filtered = true
     end
-    if canShow and self.filtered ~= filtered then
-      self.isStale = true
-      print('  '..self.questID..':|cFFFFFF00CheckFilterRules()|r ', canShow, filtered, self.title)
-    end
-    self.filtered = filtered
   end
-  self.used = canShow
-  if not canShow then
-    self.hideReason = "Failed filter check."
+
+  print('  '..self.questID..':|cFFFFFF00CheckFilterRules()|r', filtered, self.title)
+  if self.filtered ~= filtered then
+    self.isStale = true
   end
-  self:SetShown(canShow)
+
+  self.used = true
+  self:SetShown(true)
 end
 
 --- Fixes icons upon size update
--- a/WorldQuests.lua	Mon Apr 10 07:34:29 2017 -0400
+++ b/WorldQuests.lua	Mon Apr 10 13:14:05 2017 -0400
@@ -30,7 +30,6 @@
 
 local ToggleButton = {}
 local callbacks = {}
-local PinBaseIndex = 1200
 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
 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', }
@@ -348,7 +347,6 @@
       pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin')
 
       pin:SetID(totalPins)
-      pin:SetFrameStrata('HIGH')
       numOverlays = numOverlays + 1
       --pin.iconBorder:SetVertexColor(0,0,0,1)
     end
@@ -385,8 +383,11 @@
 
   if (not pin.dataLoaded) then
     local dataLoaded = pin:GetData()
-    isDataLoaded = (isDataLoaded and dataLoaded)
-    WorldPlan.dataFlush = true
+    if dataLoaded then
+      WorldPlan.dataFlush = true
+    else
+      isDataLoaded = false
+    end
   end
 
 
@@ -412,8 +413,9 @@
     db.TasksByID[id] = nil
   end
   pin.isActive = nil
+  pin.used = nil
   pin.dataLoaded = nil
-  pin:HideFrames()
+  pin:SetShown(false)
   tinsert(db.FreePins, pin)
 
   WorldPlan.dataFlush = true
@@ -585,8 +587,6 @@
       if pin:IsShown() and (layoutDirty or pin.isStale) then
         local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
         pin.owningFrame = WorldMapFrame
-        pin:SetFrameLevel(PinBaseIndex+pin:GetID())
-        pin.Overlay:SetFrameLevel(overlayBaseIndex+pin:GetID())
         pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor)
         if pin.isStale then
           pin:Refresh('WORLDMAP_REFRESH ' .. GetTime())