Mercurial > wow > buffalo2
view ObjectiveInfo.lua @ 14:ed642234f017
ObjectiveFrame
- implement proper tracker name text
- expanded tracker prototypes to cover "objective lines" formatting and accommodation of widget variables
- implement the progress bars for bonus objectives
ObjectiveStyle
- moved `UpdateWrapperStyle` over and renamed it to fit semantics
- change the formula for block.`height` to measure non-widget content only
- allows widgets to position relative to text
- size FontString `status` to match block.`height`
- full block height is acquired by adding block.`height` and block.`attachmentHeight` which is calculated during objective parsing
ObjectiveWidgets
- use string keys for generated widgets to deal with multiple objectives under the same questID, and maybe dungeon objectives
- wrapper buttons use a common code path
- specialized handlers for wheel scrolling moved over to fit semantics
author | Nenue |
---|---|
date | Mon, 04 Apr 2016 03:16:22 -0400 |
parents | 9455693fc290 |
children | 880828018bf4 |
line wrap: on
line source
local B = select(2,...).frame local wipe, pairs, ipairs, min, max, unpack = table.wipe, pairs, ipairs, min, max, unpack local GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo = GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo local GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo = GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') local print = B.print('TrackerInfo') local Tracker, Bonus, AutoQuest, Quest, Cheevs = mod.Tracker, mod.Bonus, mod.AutoQuest, mod.Quest, mod.Cheevs -------------------------------------------------------------------- --- Tracker-specific data retrieval functions -------------------------------------------------------------------- ----------------------------- --- AUTO_QUEST AutoQuest.GetNumWatched = GetNumAutoQuestPopUps AutoQuest.GetInfo = function(watchIndex) return Quest.GetInfo(watchIndex) end ----------------------------- --- BONUS OBJECTIVE Bonus.TasksTable = {} Bonus.TasksPOI = {} Bonus.TaskScenario = {} local taskData = {} Bonus.QuestBlock = {} Bonus.GetNumWatched = function() Bonus.TasksTable = GetTasksTable() local numTasks = 0 for i, questID in ipairs(Bonus.TasksTable) do local isInArea, isOnMap, numObjectives = GetTaskInfo(questID) if isInArea and isOnMap then numTasks = numTasks + 1 end end Bonus.numAll = #Bonus.TasksTable Bonus.numWatched = numTasks return GetNumQuestLogTasks() end Bonus.GetInfo = function(self, watchIndex) local questID = Bonus.TasksTable[watchIndex] if not questID then print('|cFFFF4400no quest ID for row', watchIndex) return end local t= {} t.isInArea, t.isOnMap, t.numObjectives = GetTaskInfo(questID) print('isInArea', t.isInArea, 'isOnMap', t.isOnMap, 'numObj', t.numObjectives) t.displayObjectives = false t.isComplete = true t.questID = questID if t.numObjectives >= 1 then print(t.numObjectives,'objective rows') t.objectives = {} for i = 1, t.numObjectives do t.objectives[i] = {} local o = t.objectives[i] o.index = i o.text, o.objectiveType, o.finished, o.displayAsObjective = GetQuestObjectiveInfo(questID, i, true) print(i, '==>', o.text, o.objectiveType, o.finished, o.displayAsObjective) t.displayObjectives = t.displayObjectives or o.displayAsObjective t.isComplete = t.isComplete and o.finished end end Bonus.TasksTable[questID] = t return t end ----------------------------- --- QUEST Quest.itemButtons = {} Quest.freeButtons = {} Quest.POI = {} Quest.QuestBlock = {} Quest.GetNumWatched = function() Quest.numAll = GetNumQuestLogEntries() Quest.numWatched = GetNumQuestWatches() return Quest.numWatched end Quest.GetInfo = function (self, watchIndex) print('|cFF00DDFFQuest|r.|cFF0088FFGetInfo(|r'.. tostring(watchIndex)..'|r)') local questID, title, questIndex, numObjectives, requiredMoney, isComplete, startEvent, isAutoComplete, failureTime, timeElapsed, questType, isTask, isStory, isOnMap, hasLocalPOI = GetQuestWatchInfo(watchIndex) local _, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, _, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questIndex) local questTagID, tagName = GetQuestTagInfo(questID); if not questID then return end self.Info[questID] = self.Info[questID] or {} local q = self.Info[questID] q.watchIndex = watchIndex q.type = 'Quest' q.questID = questID q.title = title q.level = level q.questLogIndex = questIndex q.numObjectives = numObjectives q.requiredMoney = requiredMoney q.isComplete = isComplete q.startEvent = startEvent q.isAutoComplete = isAutoComplete q.failureTime = failureTime q.timeElapsed = timeElapsed q.questType = questType q.isTask = isTask q.isStory = isStory q.isOnMap = isOnMap q.hasLocalPOI = hasLocalPOI q.isDaily = ( frequency == LE_QUEST_FREQUENCY_DAILY and (not isComplete or isComplete == 0) ) q.isWeekly = ( frequency == LE_QUEST_FREQUENCY_WEEKLY and (not isComplete or isComplete == 0) ) q.isComplete = isComplete q.isStory = isStory q.isTask = isTask if isTask then --q.task = Bonus.GetInfo(questID) end --q.isBreadCrumb = isBreadCrumb q.completionText= GetQuestLogCompletionText(questIndex) q.numObjectives = GetNumQuestLeaderBoards(questIndex) q.isWatched = IsQuestWatched(questIndex) q.isHardWatched = IsQuestHardWatched(questIndex) q.objectives = {} for i = 1, q.numObjectives do local text, type, finished = GetQuestLogLeaderBoard(i, questIndex) q.objectives[i] = { index = i, type = type, text = text, finished = finished } if type == 'event' then elseif type == 'monster' then elseif type == 'object' then elseif type == 'reputation' then elseif type == 'item' then end end local link, icon, charges = GetQuestLogSpecialItemInfo(questIndex) local start, duration, enable = GetQuestLogSpecialItemCooldown(questIndex) if link or icon or charges then q.specialItem = { questID = questID, questIndex = questIndex, link = link, charges = charges, icon = icon, start = start, duration = duration, enable = enable, } end if QuestHasPOIInfo(questID) then local distance, onContinent = GetDistanceSqToQuest(questIndex) if distance ~= nil and distance > 0 then self.POI[questIndex] = { questIndex = questIndex, questID = questID, distance = distance, onContinent = onContinent } end end q.superTracked = (questID == GetSuperTrackedQuestID()) -- call directly so artifact data doesn't become an issue self.WatchInfo[watchIndex] = q self.LogInfo[questIndex] = q print('- logIndex =', questIndex, 'title =', title) return q end Quest.GetClosest = function() local minID local minDist = math.huge for i = 1, Quest.GetNumWatched() do local info = Quest.GetInfo(i) if info.hasLocalPOI then local distance, onContinent = GetDistanceSqToQuest(info.questIndex) end end end Cheevs.GetNumWatched = function(self) Cheevs.trackedCheevs = {GetTrackedAchievements()} return GetNumTrackedAchievements() end Cheevs.GetInfo = function(self, index) local cheevID = Cheevs.trackedCheevs[index] local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID) self.Info[cheevID] = {} local c = self.Info[cheevID] c.type = 'Cheevs' c.watchIndex = index c.cheevID = cheevID c.title = name c.points, c.completed, c.month, c.day, c.year, c.description, c.flags, c.icon, c.rewardText, c.isGuildAch, c.wasEarnedByMe, c.earnedBy = points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy c.numObjectives = GetAchievementNumCriteria(cheevID) c.objectives = {} for i = 1, c.numObjectives do local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i) c.objectives[i] = { index = i, cheevID = cheevID, text = description, type = type, finished = completed, value = quantity, maxValue = requiredQuantity, characterName = characterName, flags = flags, assetID = assetID, quantityString = quantityString, criteriaID = criteriaID, } end print('Cheevs.|cFF0088FFGetInfo|r('..index..')', 'obj:', GetAchievementNumCriteria(cheevID), name, description) self.WatchInfo[index] = c return self.Info[cheevID] end