diff QuestPOI.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
line wrap: on
line diff
--- a/QuestPOI.lua	Sun Apr 02 13:51:24 2017 -0400
+++ b/QuestPOI.lua	Wed Apr 05 11:36:06 2017 -0400
@@ -59,7 +59,14 @@
 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 REWARD_HONOR = WORLD_QUEST_REWARD_TYPE_FLAG_HONOR
+
+local REWARD_TYPE_NAMES = {
+  [REWARD_CASH] = 'Money',
+  [REWARD_ARTIFACT_POWER] = 'AP',
+  [REWARD_GEAR] = 'Equipment',
+  [REWARD_CURRENCY] = 'Currency',
+  [REWARD_REAGENT] = 'Trade Goods'
+}
 
 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP
 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE
@@ -75,6 +82,7 @@
 
 local DEFAULT_STYLE = {
   border = {1,1,1},
+  textColor = {1,1,1,1},
   x = 0, y = 0,
   desaturated = true,
   iconMask = "Interface\\Minimap\\UI-Minimap-Background",
@@ -103,7 +111,9 @@
 
     hideNumber = true,
   },
-  [REWARD_CURRENCY] = {},
+  [REWARD_CURRENCY] = {
+    textColor = {1,1,0,.5}
+  },
   [REWARD_REAGENT] = {
 
     hideNumber = true,
@@ -365,7 +375,7 @@
     self.worldQuestType = worldQuestType
     self.tagAtlas = tagAtlas
 
-    local dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality = self:UpdateRewards()
+    local dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality, xpType, xpName, xpIcon, xpCount = self:UpdateRewards()
     dprint('|cFFBB8844  dataLoaded|r =', dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality)
     if dataLoaded then
       self.rewardType = rewardType
@@ -375,6 +385,8 @@
       self.itemQuality = quality
       self.dataLoaded = true
       self.isStale = true
+      self.xpType, self.xpName, self.xpIcon, self.xpCount = xpType, xpName, xpIcon, xpCount
+
     end
   end
 
@@ -382,6 +394,9 @@
   return self.dataLoaded
 end
 
+local ID_RESOURCES = 1220
+local ID_LEGIONFALL = 1342
+
 --- Returns true if data has changed (either from loading in or qualifications changed)
 function QuestPOI:UpdateRewards()
   local questID = self.questID
@@ -393,6 +408,7 @@
     local rewardItems, rewardCurrency = {}, {}
     local rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality
     local xpIcon, xpName, xpCount, xpType
+    local foundPrimary
 
     if (GetNumQuestLogRewardCurrencies(questID) > 0 or GetNumQuestLogRewards(questID) > 0 or GetQuestLogRewardMoney(questID) > 0 or GetQuestLogRewardArtifactXP(questID) > 0 or GetQuestLogRewardHonor(questID)) then
       local money = GetQuestLogRewardMoney(questID)
@@ -411,11 +427,12 @@
         rewardCount = artifactXP
         rewardType = REWARD_ARTIFACT_POWER
         qprint('  artifactXP', artifactXP)
+        foundPrimary = true
       end
 
       local numQuestCurrencies = GetNumQuestLogRewardCurrencies(questID);
       for i = 1, numQuestCurrencies do
-        local name, texture, numItems = GetQuestLogRewardCurrencyInfo(i, questID);
+        local name, texture, numItems, currencyID = GetQuestLogRewardCurrencyInfo(i, questID);
         local text = BONUS_OBJECTIVE_REWARD_WITH_COUNT_FORMAT:format(texture, numItems, name);
         tinsert(rewardCurrency, {
           name = name,
@@ -423,11 +440,21 @@
           numItems = numItems,
           text = text
         })
-        qprint('  currency', i, name, " |T"..tostring(texture)..":12:12|t")
-        rewardIcon = texture
-        rewardCount = numItems
-        rewardName = name
-        rewardType = REWARD_CURRENCY
+
+        qprint('  currency', i, currencyID, name, " |T"..tostring(texture)..":12:12|t")
+        if currencyID == ID_RESOURCES then
+          rewardIcon = texture
+          rewardCount = numItems
+          rewardName = name
+          rewardType = REWARD_CURRENCY
+          foundPrimary = true
+        elseif currencyID == ID_LEGIONFALL then
+          xpIcon = texture
+          xpCount = numItems
+          xpName = name
+          xpType = REWARD_CURRENCY
+        end
+
       end
       local honorAmount = GetQuestLogRewardHonor(questID);
       if honorAmount > 0 then
@@ -439,7 +466,6 @@
 
       local numQuestRewards = GetNumQuestLogRewards(questID);
       if numQuestRewards > 0 then
-        local foundPrimary
         for i = 1, numQuestRewards do
           local name, texture, numItems, quality, isUsable, itemID = GetQuestLogRewardInfo(i, questID)
 
@@ -496,6 +522,7 @@
               isUsable = isUsable
             })
             if not foundPrimary then
+              print('  -updating primary')
               rewardType = REWARD_GEAR
 
               rewardIcon = texture
@@ -516,7 +543,7 @@
           return false
         end
 
-        return true, rewardType, rewardName, rewardIcon, rewardCount, quality
+        return true, rewardType, rewardName, rewardIcon, rewardCount, quality, xpType, xpName, xpIcon, xpCount
 
       else
         return false
@@ -546,16 +573,19 @@
 
 function QuestPOI:StartFade()
   if not self.isAnimating then
-    --qprint('|cFFFFFF00'.. self.title .. ' added to quest log.')
+    qprint('|cFFFFFF00clearing new status')
     self:SetAlpha(0)
+    if self.dataLoaded then
+      self:Refresh()
       self.FadeIn.FadeIn:SetToAlpha(db.PinAlpha)
       self.PendingFade.FadeIn:SetToAlpha(db.PinAlpha)
       self.PendingFade.FadeOut:SetFromAlpha(db.PinAlpha)
 
-    self.isAnimating = true
-    self.isNew = nil
-    self.isStale = true
-    self.FadeIn:Play()
+      self.isAnimating = true
+      self.isNew = nil
+      self.isStale = true
+      self.FadeIn:Play()
+    end
   end
 end
 
@@ -566,20 +596,18 @@
 
 function QuestPOI:OnShow ()
 
-  if self.isStale then
-    qprint('|cFF0088FFflagged for refresh')
-    self:Refresh()
+  if self.isNew then
+    self:StartFade()
+  else
+    if not self.isAnimating then
+      print('|cFF00FF00Alpha correction')
+      self:SetAlpha(db.PinAlpha) -- fix stuck alpha
+    end
+    if self.isStale then
+      print('|cFF00FF00refresh on show')
+      self:Refresh()
+    end
   end
-
-  if self.isNew then
-    qprint('|cFFFFFF00popping new pin handler')
-    self:StartFade()
-  end
-
-  if not self.isAnimating then
-    self:SetAlpha(db.PinAlpha) -- fix stuck alpha
-  end
-
   self:ShowFrames()
 end
 
@@ -589,12 +617,17 @@
   -- reset flags
   self:SetAlpha(db.PinAlpha)
   self.isAnimating = nil
+  if db.Config.DebugEnabled then
+    db.log(tostring(self.questID) .. ' ' .. tostring(self.title) .. "\n" .. tostring(REWARD_TYPE_NAMES[self.rewardType]) .. ' ' .. tostring(self.itemName) .. ' ' .. tostring(self.itemNumber) .. "\n|cFFFF4400" .. (self.hideReason or 'NO_MESSAGE') .. "|r\n|cFF00FFFF" ..  debugstack(2,3,0) .. '|r')
+  end
+  self.hideReason = nil
 end
 
 -- Applies position and sizing parameters to the pin data
 function QuestPOI:SetAnchor(owner, dX, dY, mapWidth, mapHeight, scaleFactor)
   dprint(self:GetName()..':SetAnchor()', owner, dX, dY, scaleFactor, self.filtered, self.used)
   if not self.used then
+    self.hideReason = 'SetAnchor() on an unused frame.'
     self:HideFrames()
     return
   end
@@ -616,7 +649,7 @@
 
   local scaleChanged
   if scaleFactor and (self.scaleFactor ~= scaleFactor) then
-    print('scaleFactor')
+    --print('scaleFactor')
     self:SetScale(scaleFactor)
     self.Overlay:SetScale(scaleFactor)
     self.scaleFactor = scaleFactor
@@ -645,8 +678,6 @@
     print('|cFFFFFF00' ..self:GetName()..':ShowFrames()')
     -- do not SetShown() here
   end
-
-  self.count:SetShown(true)
   self.Overlay:SetShown(true)
   self.count:SetShown(true)
   self.timeLabel:SetShown(true)
@@ -654,10 +685,12 @@
 
 function QuestPOI:HideFrames()
   if self:IsShown() then
-    print(self:GetName()..':HideFrames()')
+    if not self.hideReason then
+      self.hideReason = "HideFrames() called"
+    end
+    --print(self:GetName()..':HideFrames()')
     self:SetShown(false)
   end
-  self.count:SetShown(false)
   self.Overlay:SetShown(false)
   self.count:SetShown(false)
   self.timeLabel:SetShown(false)
@@ -709,35 +742,24 @@
   --@end-debug@
 
   -- query for reward data if it wasn't found in the original scan
-  local questID = self.questID
+
   if not self.dataLoaded then
     print('|cFFFF4400'..self:GetID()..':|r polling reward info')
-    if not (self.isAnimating) then
-      self.PendingFade:Play()
-    end
+
     local dataLoaded = self:GetData()
     if dataLoaded and not tContains(db.UpdatedPins, self) then
 
-      print('|cFF00FF88'..self:GetID()..':|r reward info loaded! queue it up')
-
+      print('|cFF00FF88'..self:GetID()..':|r delayed reward info, queueing for update')
+      self.PendingFade:Stop()
       tinsert(db.UpdatedPins, self)
     end
     return
-  else
-    if self.PendingFade:IsPlaying() then
-      print('|cFFFF4400'..self:GetID()..':|r cancel fader')
-      self.PendingFade:Stop()
-    end
-
-    if self.isStale then
-      print(self.questID, '|cFFFFFF00flagged for update')
-      self:CheckFilterRules()
-      self:Refresh()
-      return
-    end
   end
 
-  self:UpdateStatus()
+  if self.maxAlertLevel then
+    self:UpdateStatus()
+  end
+
 end
 
 -- Called at static intervals and with Refresh
@@ -755,10 +777,6 @@
         tl = timeState
         self.timeLabel:SetText(text)
       end
-    else
-      if self.worldQuestType ~= LE_QUEST_TAG_TYPE_PROFESSION then
-        self:HideFrames()
-      end
     end
 
     if tl and (timeLeft < 120) then
@@ -771,10 +789,9 @@
     self.alertLevel = tl
     self.timeLabel:SetShown(self.worldQuest and (self.maxAlertLevel >= 1))
   else
-    if not self.completed then
-      self.completed = true
-      self:HideFrames()
-    end
+    self.hideReason = "No longer active."
+    self:HideFrames()
+
   end
 end
 
@@ -799,6 +816,7 @@
   local tagSize = style.TagSize or DEFAULT_STYLE.TagSize
   local hideIcon = style.hideIcon or DEFAULT_STYLE.hideIcon
   local borderColor = style.border or DEFAULT_STYLE.border
+  local textColor = style.textColor or DEFAULT_STYLE.textColor
   local questID = self.questID
   local iconBorder = self.RewardBorder
   local trackingBorder = self.HighlightBorder
@@ -829,7 +847,9 @@
         end
         numberString = numberString .. 'k'
       end
+
       self.count:SetText(numberString)
+      self.count:SetTextColor(unpack(textColor))
       self.count:Show()
     else
       self.count:SetText(nil)
@@ -907,16 +927,24 @@
 }
 
 
-
 function QuestPOI:CheckFilterRules ()
   local print = qprint
   local qType = self.worldQuestType
   local filtered
   local canShow = TQ_IsActive(self.questID)
-  if SpellCanTargetQuest() then
-    -- hiding so player can click a valid target
-    self.used = nil
-  elseif qType == LE_QUEST_TAG_TYPE_PROFESSION then
+
+  if db.canTargetQuests then
+    self:EnableMouse(false)
+    if not IsQuestIDValidSpellTarget(self.questID) then
+      self.hideReason = "Not a valid spell target."
+      self:SetShown(false)
+      return
+    end
+  else
+    self:EnableMouse(true)
+  end
+
+  if qType == LE_QUEST_TAG_TYPE_PROFESSION then
     if not(self.isKnownProfession or db.Config.ShowAllProfessionQuests) then
       canShow = nil
     end
@@ -942,10 +970,11 @@
     end
     self.filtered = filtered
   end
-
   self.used = canShow
-
-
+  if not canShow then
+    self.hideReason = "Failed filter check."
+  end
+  self:SetShown(canShow)
 end
 
 --- Fixes icons upon size update