diff ObjectiveTracker/AchievementData.lua @ 43:9480bd904f4c

- file name organizing
author Nenue
date Mon, 25 Apr 2016 13:51:58 -0400
parents ObjectiveTracker/Achievements.lua@03ed70f846de
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ObjectiveTracker/AchievementData.lua	Mon Apr 25 13:51:58 2016 -0400
@@ -0,0 +1,206 @@
+--- ${PACKAGE_NAME}
+-- @file-author@
+-- @project-revision@ @project-hash@
+-- @file-revision@ @file-hash@
+-- Created: 4/13/2016 7:48 PM
+local B = select(2,...).frame
+local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
+local band = bit.band
+local RemoveTrackedAchievement, GetAchievementLink = RemoveTrackedAchievement, GetAchievementLink
+local AchievementFrame_ToggleAchievementFrame, AchievementFrame_SelectAchievement = AchievementFrame_ToggleAchievementFrame, AchievementFrame_SelectAchievement
+local GetTime, GetAchievementNumCriteria, GetAchievementCriteriaInfo = GetTime, GetAchievementNumCriteria, GetAchievementCriteriaInfo
+local GetNumTrackedAchievements, GetTrackedAchievements, GetAchievementInfo = GetNumTrackedAchievements, GetTrackedAchievements, GetAchievementInfo
+local Default, Cheevs = T.DefaultHandler, T.Cheevs
+local wipe = table.wipe
+local print, bprint, lprint, iprint = B.print('Tracker'), B.print('Block'), B.print('Line'), B.print('iprint')
+
+--- Frame data
+Cheevs.UpdateObjectives = function(handler, block, block_schema)
+  -- if completed on another character, only show the heading for CHATLINK
+  if block.info.completed then
+    return 0, block_schema
+  end
+
+  if block.info.description then
+    handler:AddLine(block, block.info.description, nil, 'defalut')
+  end
+  local attachments = Default.UpdateObjectives(handler, block, block_schema)
+
+  return attachments, block_schema
+end
+
+Cheevs.UpdateLine = function(handler, block, data)
+  local print = lprint
+  local attachment
+  local text
+  local lineSchema = 'default'
+  print('  ', data.objectiveIndex,'|cFF'..handler.internalColor..'-|r', data.objectiveType, data.text)
+  if data.type == CRITERIA_TYPE_ACHIEVEMENT then
+    if data.value == 1 then
+      return nil, nil
+    end
+
+    text = data.text
+    lineSchema = (data.quantity == 1) and 'achievement_complete' or 'achievement'
+  elseif band(data.flags, 0x00000001) > 0 then
+    attachment = T.GetWidget(data, 'StatusBar', data.criteriaID)
+    attachment.format = "%d/%d"
+    attachment.value = data.value
+    attachment.maxValue = data.maxValue
+    attachment:SetParent(block)
+
+    print(attachment:GetNumPoints())
+    for i = 1, attachment:GetNumPoints() do
+      print('  ',attachment:GetPoint(i))
+    end
+    attachment.status:SetFormattedText("%d/%d", data.value, data.maxValue)
+    attachment:SetPoint('TOP', line, 'TOP')
+    lineSchema = 'progressbar'
+  else
+
+    text = format("%d/%d %s", data.value, data.maxValue, data.text)
+    lineSchema = 'default'
+  end
+  print('  |cFF'..handler.internalColor..'UpdateLine:|r', data.type, data.quantityString, 'qty:', data.quantity, 'assetID:', data.assetID)
+  return text, attachment, lineSchema
+end
+
+Cheevs.Select = function(self, block)
+  Cheevs.Link(self, block)
+  T:Update(self.updateReasonModule, block.info.cheevID)
+end
+
+Cheevs.Remove = function(self, block)
+
+  RemoveTrackedAchievement(block.info.cheevID)
+end
+Cheevs.OnMouseUp = function(self, button)
+
+  Default.OnMouseUp(self, button)
+end
+Cheevs.Link = function(self, block)
+  local achievementLink = GetAchievementLink(block.info.cheevID);
+  if ( achievementLink ) then
+    _G.ChatEdit_InsertLink(achievementLink);
+  end
+end
+
+--- Data accessors
+Cheevs.GetNumWatched = function(self, targetID, isNew)
+  local trackedList = {GetTrackedAchievements() }
+  local numWatched, numAll = #trackedList, #self.WatchList
+  print('    |cFF'..self.internalColor..'GetNumWatched:|r',self.name, numWatched, ' ('..numAll..' recorded)')
+  local start = 1
+  local limit = max(numAll, #trackedList)
+  if targetID then
+    if not isNew and self.Info[targetID] then
+      -- if it's only an update, we can limit the scope
+      start = self.Info[targetID].watchIndex
+      print('    |cFF'..self.internalColor..'GetNumWatched: limit selection to['..start..'-'..limit..']')
+      if self.InfoBlock[targetID] then
+        self.InfoBlock[targetID]:Hide()
+      end
+
+    end
+  end
+
+  for index = start, limit do
+    if index > numWatched then
+      self.WatchList[index] = nil
+      print('      % dropping watch entry #'..index)
+    else
+      local cheevID = trackedList[index]
+      if not self.Info[cheevID] then
+        self.Info[cheevID] = self:GetInfo(cheevID, index)
+      else
+        print('    |cFF'..self.internalColor..'GetInfo:', cheevID, 'already pulled')
+      end
+      self:GetObjectives(cheevID)
+
+      local info = self.Info[cheevID]
+      local watchBlock = self.WatchBlock[cheevID]
+
+      self.Info[cheevID].watchIndex = index
+      self.WatchList[index] = info
+    end
+  end
+
+  numAll = #self.WatchList
+  return numWatched, numAll, self.WatchList
+end
+Cheevs.GetInfo = function(self, cheevID, watchIndex)
+  --- step 1: confirm primary data and begin an entry if needed
+  local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID)
+  if not id then return nil end
+
+  print('      |cFF'..self.internalColor..'GetInfo: pulling', id..',', name, earnedBy)
+
+
+  self.Info[cheevID] = self.Info[cheevID] or {}
+  local c = self.Info[cheevID]
+  local rewards = {}
+
+  c.schema = 'achievement'
+  c.rewardInfo = rewards
+  c.type = 'Cheevs'
+  c.title = name
+  c.points = points
+  c.completed = completed
+  c.month = month
+  c.day = day
+  c.year = year
+  c.description = description
+  c.flags = flags
+  c.icon = icon
+  c.rewardText = rewardText
+  c.isGuildAch = isGuildAch
+  c.wasEarnedByMe = wasEarnedByMe
+  c.earnedBy = earnedBy
+
+  local tagInfo = {}
+  c.tagInfo = tagInfo
+  c.watchIndex = watchIndex
+  c.id = cheevID
+  c.cheevID = cheevID
+
+  self.Info[cheevID] = c
+  self.WatchInfo[watchIndex] = c
+  return c
+end
+
+Cheevs.GetObjectives = function(self, cheevID)
+  local c = self.Info[cheevID]
+  c.numObjectives = GetAchievementNumCriteria(cheevID)
+  c.objectives = c.objectives or {}
+  for i = 1, c.numObjectives do
+    local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i)
+    local line = c.objectives[i] or {}
+    line.objectiveIndex = i
+    line.cheevID = cheevID
+    line.text = description
+    line.type = type
+    line.finished = completed
+    line.value = quantity
+    line.maxValue = requiredQuantity
+    line.characterName = characterName
+    line.flags = flags
+    line.assetID = assetID
+    line.quantityString = quantityString
+    line.criteriaID = criteriaID
+    c.objectives[i] = line
+
+    print('        |cFF'..self.internalColor..'GetObjectives:|r', i, format('|cFF0088FF%02X|r(%d)', type, type), format('|cFF88FF00%01X|r', flags or 0), '|cFF00FF00'..tostring(quantity)..'|r/|cFF00FF00'.. tostring(requiredQuantity)..'|r', '"|cFF88FF00'..tostring(description)..'|r"')
+  end
+end
+
+
+Cheevs.Open = function(self, block)
+
+  if ( not _G.AchievementFrame ) then
+    _G.AchievementFrame_LoadUI();
+  end
+  if ( not _G.AchievementFrame:IsShown() ) then
+    _G.AchievementFrame_ToggleAchievementFrame();
+  end
+  _G.AchievementFrame_SelectAchievement(block.info.cheevID);
+end