diff ObjectiveTracker/BonusObjectives.lua @ 33:64f2a9bbea79

- implementing structural revisions in bonus objectives - prevent instances of nil arithmetic - decide on where to keep style values - start widgets with dummy values for operability
author Nenue
date Fri, 15 Apr 2016 17:01:06 -0400
parents a3afe6c3771e
children 9856ebc63fa4
line wrap: on
line diff
--- a/ObjectiveTracker/BonusObjectives.lua	Fri Apr 15 07:01:40 2016 -0400
+++ b/ObjectiveTracker/BonusObjectives.lua	Fri Apr 15 17:01:06 2016 -0400
@@ -8,16 +8,14 @@
 local Default, Quest = T.DefaultHandler, T.Quest
 local print = B.print('Tracker')
 local lprint = B.print('Line')
+local iprint = B.print('Info')
 local Bonus = T.Bonus
 
 local UnitName, GetRealmName, GetQuestObjectiveInfo, GetTasksTable, GetTaskInfo = UnitName, GetRealmName, GetQuestObjectiveInfo, GetTasksTable, GetTaskInfo
 local GetMapNameByID, GetCurrentMapAreaID = GetMapNameByID, GetCurrentMapAreaID
 local tinsert, ipairs, pairs, tostring = tinsert, ipairs, pairs, tostring
-local GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo = GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo
-local GetNumQuestLogRewards, GetQuestLogRewardInfo = GetNumQuestLogRewards, GetQuestLogRewardInfo
-local GetQuestLogRewardMoney, GetMoneyString = GetQuestLogRewardMoney, GetMoneyString
 local GetQuestProgressBarPercent, PERCENTAGE_STRING, GetTime = GetQuestProgressBarPercent, PERCENTAGE_STRING, GetTime
-
+local STICKY_TASKS = true
 
 --- Returns a tasks table modified to include recently completed objectives
 local InternalGetTasksTable = function()
@@ -88,11 +86,13 @@
 Bonus.QuestBlock = {}
 Bonus.WatchInfo = {}
 function Bonus:GetNumWatched ()
+  local print = iprint
   print(self.name, self)
 
   local tasks = InternalGetTasksTable()
   local numWatched = 0
   local numAll = 0
+  local existingTasks = {}
   self.WatchInfo = {}
   print('|cFFFFFF00Bonus.GetNumWatched()|r', #tasks)
   print('  TasksTable pull:')
@@ -106,19 +106,15 @@
       self.Info[questID] = self.Info[questID] or {}
 
       local t = self.Info[questID]
-      self.WatchInfo[i] = t
-      t.isInArea = isInArea
-      t.isOnMap = isOnMap
-      t.existingTask = existingTask
-      t.questID = questID
-      t.id = questID
-      t.objectives = {}
-      t.taskIndex = i
-
-
-      T.SetRewards(t, questID)
+      if (isOnMap or isInArea) and existingTask then
+        t.areaID = GetCurrentMapAreaID()
+        local _
+        t.mapName, _, _, t.isMicroDungeon, t.microDungeonMapName = GetMapInfo()
+        print('|cFF00FF00scooping map info (questID '..questID..'):|r', t.areaID, t.mapName)
+      end
 
       local taskTitle
+      t.objectives = {}
       local taskFinished = true;
       for objectiveIndex = 1, numObjectives do
         local text, objectiveType, finished, displayAsObjective = InternalGetQuestObjectiveInfo(questID, objectiveIndex, false);
@@ -143,13 +139,23 @@
         print('     |cFF00FF88*', objectiveIndex, text)
       end
 
+      T.SetRewards(t, questID)
+
       -- didn't get a name from progress bar? what about area name
       if not taskTitle then
         if isInArea then
           taskTitle = GetMapNameByID(GetCurrentMapAreaID())
         end
       end
+
+      t.isInArea = isInArea
+      t.isOnMap = isOnMap
+      t.existingTask = existingTask
+      t.questID = questID
+      t.id = questID
+      t.taskIndex = i
       t.title = taskTitle
+      self.WatchInfo[i] = t
     end
 
     print ('    |cFF00FF88#', i, 'questID', questID, 'inArea', isInArea, 'onMap', isOnMap, 'existing', (existingTask and 'Y' or 'N'), (test and '|cFF00FF00show|r' or '|cFFFF0088hide|r'))
@@ -164,10 +170,10 @@
 end
 
 --- info cleanup done when  turn-ins are detected
-Bonus.OnTurnIn = function(self, questID, xp, money)
-
-  if #self.info.rewardInfo >= 1 then
-    for i, reward in ipairs(self.info.rewardInfo) do
+Bonus.OnTurnIn = function(self, block, questID, xp, money)
+  local info = self.Info[questID]
+  if info.rewardInfo and #info.rewardInfo >= 1 then
+    for i, reward in ipairs(info.rewardInfo) do
       --[[
         type = 'item',
         index = i ,
@@ -182,13 +188,15 @@
     end
   end
 
-  print('|cFFFF8800'..self.name..':OnTurnIn call', questID, xp, money)
+  print('|cFFFF8800'..block.name..':OnTurnIn call', questID, xp, money)
   local savedTasks = B.Conf.TasksLog
 
-  self.Info[questID].completedTime = GetTime()
-  self.Info[questID].animate = true
-  T.SetAnimate(self.watchReasonModule)
-  savedTasks[questID] = self.Info[questID]
+  info.completedTime = GetTime()
+  info.animate = true
+  T.SetAnimate(handler.watchReasonModule)
+  savedTasks[questID] = info
+
+  print('adding', info.title, 'to cache')
 end
 
 Bonus.GetInfo = function(self, taskIndex)
@@ -203,7 +211,7 @@
   Default.UpdateObjectives(handler, block)
 end
 
-Bonus.UpdateLine = function(handler, objectiveType, line, data)
+Bonus.UpdateLine = function(handler, block, line, data)
   local info = block.info
   local print = lprint
   local text, attachment = '', nil
@@ -211,11 +219,15 @@
   print('  ', data.objectiveIndex,'|cFFFF0088-|r', data.objectiveType, data.text)
   if data.objectiveType == 'progressbar' then
     print('    |cFFFF44DDpercent='..tostring(GetQuestProgressBarPercent(info.questID)))
-    data.value = GetQuestProgressBarPercent(info.questID) or 0
-    data.maxValue = 100
+    local percent = 100
     attachment = T.SetWidget(line, data, 'ProgressBar', info.questID..'-'..data.objectiveIndex)
+    if not data.finished then
+      percent = GetQuestProgressBarPercent(info.questID)
+    end
+    attachment.value = percent
+    attachment.maxValue = 100
     attachment:SetPoint('TOP', line, 'TOP', 0, 0)
-    attachment.status:SetFormattedText(PERCENTAGE_STRING, (data.value / data.maxValue))
+    attachment.status:SetFormattedText(PERCENTAGE_STRING, (percent / 100))
     print('    |cFFFF0022** text:|r', data.text, '|cFFFF0022value:|r', data.value, '|cFFFF0022max:|r', data.maxValue)
   else
     text = data.text
@@ -223,8 +235,9 @@
   return text, attachment
 end
 
-Bonus.Select = function(self)
-  Bonus:OnTurnIn(self.info.questID)
+Bonus.Select = function(handler, block)
+  print(handler, block)
+  handler:OnTurnIn(block, block.info.questID)
 end
 Bonus.Remove = function(self)