view ObjectiveTracker/Achievements.lua @ 35:69d03f8e293e

- separated layout and data logic between Frame.lua and Update.lua - solved disappearing tracker mystery
author Nenue
date Sun, 17 Apr 2016 11:07:48 -0400
parents 9856ebc63fa4
children e84d645c8ab8
line wrap: on
line source
--- ${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 print = B.print('Tracker')
local lprint = B.print('Line')
local iprint = B.print('Info')

--- Data retrieval
Cheevs.GetNumWatched = function(self)
  print('|cFF00FF00' .. GetTime())
  Cheevs.trackedCheevs = {GetTrackedAchievements()}
  return GetNumTrackedAchievements()
end
Cheevs.GetInfo = function(self, watchIndex)
  --- step 1: confirm primary data and begin an entry if needed
  local cheevID = Cheevs.trackedCheevs[watchIndex]
  local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID)
  if not id then return false end

  if not self.Info[cheevID] then self.Info[cheevID] = {} end
  local c = self.Info[cheevID]
  local numObjectives = GetAchievementNumCriteria(cheevID)

  local tagInfo = {}
  local objectives = c.objectives or {}
  for i = 1, numObjectives do
    local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i)
    local line = 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
    objectives[i] = line
  end


  local rewards = {}
  print('      |cFF0088FFGetInfo|r:', watchIndex, '|cFF00FFFF', name)

  c.rewardInfo = rewards
  c.numObjectives = numObjectives
  c.objectives = objectives
  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

  c.tagInfo = tagInfo
  c.watchIndex = watchIndex
  c.id = cheevID
  c.cheevID = cheevID
  self.WatchInfo[watchIndex] = c
  return self.Info[cheevID]
end

--- Content handlers
Cheevs.UpdateLine = function(handler, block, line, data)
  local print = B.print('CheevsLine')
  local attachment
  line.progress = 0
  print('  ', data.objectiveIndex,'|cFF0088FF-|r', data.objectiveType, data.text)
  if data.flags then
    if band(data.flags, 0x00000001) > 0 then
      line.format = "%d/%d"
      line.widget = T.SetWidget(line, data, 'ProgressBar', data.criteriaID)
      line.height = line.widget.height
    elseif band(data.flags, 0x00000002) then
      line.widget = nil
    else
      line.widget = nil
      line.displayColor = 'FFFFFF'
      line.displayText = line.text

    end
  else

    line.displayText = data.text
  end
  print('line.type =', data.type)
  print('  ** qtyStr:', data.quantityString, 'qty:', data.quantity, 'assetID:', data.assetID)
  return line.displayText, line.widget
end

Cheevs.Select = function(self, block)
  Cheevs.Link(self, block)
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

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