Mercurial > wow > buffalo2
comparison ObjectiveCore.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 |
comparison
equal
deleted
inserted
replaced
| 13:9455693fc290 | 14:ed642234f017 |
|---|---|
| 2 -- @file-author@ | 2 -- @file-author@ |
| 3 -- @project-revision@ @project-hash@ | 3 -- @project-revision@ @project-hash@ |
| 4 -- @file-revision@ @file-hash@ | 4 -- @file-revision@ @file-hash@ |
| 5 -- Created: 3/26/2016 1:51 AM | 5 -- Created: 3/26/2016 1:51 AM |
| 6 local B = select(2,...).frame | 6 local B = select(2,...).frame |
| 7 local wipe, pairs, ipairs, min, max, unpack = table.wipe, pairs, ipairs, min, max, unpack | 7 local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring |
| 8 local setmetatable, type = setmetatable, type | 8 local format = string.format |
| 9 local GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo = GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo | 9 local M = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') |
| 10 local GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo = GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo | |
| 11 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | |
| 12 local print = B.print('Objectives') | 10 local print = B.print('Objectives') |
| 13 local ObjectiveTrackerFrame = ObjectiveTrackerFrame | 11 local ObjectiveTrackerFrame = ObjectiveTrackerFrame |
| 14 | 12 |
| 15 --[[ | 13 --[[ |
| 16 Full quest info is available if: | 14 Full quest info is available if: |
| 31 local Wrapper = _G.VeneerObjectiveWrapper | 29 local Wrapper = _G.VeneerObjectiveWrapper |
| 32 local Scroller = Wrapper.scrollArea | 30 local Scroller = Wrapper.scrollArea |
| 33 local Scroll = _G.VeneerObjectiveScroll | 31 local Scroll = _G.VeneerObjectiveScroll |
| 34 | 32 |
| 35 --- Baseline defaults | 33 --- Baseline defaults |
| 36 mod.defaults = { | 34 M.defaults = { |
| 37 | 35 |
| 38 } | 36 } |
| 39 | 37 |
| 40 --- list used to make things happen | 38 --- list used to make things happen |
| 41 mod.orderedNames = {[1] = 'AutoQuest', [2] = 'Quest', [3] = 'Cheevs'} | 39 M.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'} |
| 42 | 40 |
| 43 --- ipairs() list of handlers for wrapper update | 41 --- ipairs() list of handlers for wrapper update |
| 44 mod.orderedHandlers = {} | 42 M.orderedHandlers = {} |
| 45 mod.orderedTrackers = {} | 43 M.orderedTrackers = {} |
| 46 mod.indexedTrackers = {} | 44 M.indexedTrackers = {} |
| 47 --- pairs() list of handler frames for tracker updates | 45 --- pairs() list of handler frames for tracker updates |
| 48 mod.namedTrackers = {} | 46 M.namedTrackers = {} |
| 49 | 47 |
| 50 --- Handler stubs | 48 --- Handler stubs |
| 51 mod.AutoQuest = { | 49 M.AutoQuest = { |
| 52 name = "AutoQuest" | 50 name = "AutoQuest", |
| 53 } | 51 displayName = "Local Quests", |
| 54 mod.Quest = { | 52 } |
| 55 name = "Quest" | 53 M.Quest = { |
| 56 } | 54 name = "Quest", |
| 57 mod.Cheevs = { | 55 displayName = "Quests", |
| 58 name = "Cheevs" | 56 } |
| 57 M.Cheevs = { | |
| 58 name = "Cheevs", | |
| 59 displayName = "Achievements", | |
| 60 } | |
| 61 M.Bonus = { | |
| 62 name = "Bonus", | |
| 63 displayName = "Bonus Objectives", | |
| 59 } | 64 } |
| 60 | 65 |
| 61 | 66 |
| 62 --- Temp values set during updates | 67 --- Temp values set during updates |
| 63 local wrapperWidth, wrapperHeight | 68 local wrapperWidth, wrapperHeight |
| 98 --- Handler template | 103 --- Handler template |
| 99 local CreateHandler = function (self, name, index) | 104 local CreateHandler = function (self, name, index) |
| 100 print(self, name) | 105 print(self, name) |
| 101 local handler = setmetatable({}, { | 106 local handler = setmetatable({}, { |
| 102 __tostring = function() return name end, | 107 __tostring = function() return name end, |
| 103 __call = function (self) mod.UpdateTracker(self) end | 108 __call = function (self) M.UpdateTracker(self) end |
| 104 }) | 109 }) |
| 105 if type(mod.orderedHandlers[index]) == 'table' then | 110 if type(M.orderedHandlers[index]) == 'table' then |
| 106 return mod.orderedHandlers[index] | 111 return M.orderedHandlers[index] |
| 107 end | 112 end |
| 108 | 113 |
| 109 print('take up locals first') | 114 print('take up locals first') |
| 110 local preset = {} | 115 local preset = {} |
| 111 for k,v in pairs(mod[name]) do | 116 for k,v in pairs(M[name]) do |
| 112 preset[k] = true | 117 preset[k] = true |
| 113 if type(v) == 'table' then | 118 if type(v) == 'table' then |
| 114 handler[k] = {} | 119 handler[k] = {} |
| 115 else | 120 else |
| 116 handler[k] = v | 121 handler[k] = v |
| 122 if not handler[k] then | 127 if not handler[k] then |
| 123 if type(v) == 'table' then | 128 if type(v) == 'table' then |
| 124 -- assume all tables to be local data; don't inherit or ref | 129 -- assume all tables to be local data; don't inherit or ref |
| 125 handler[k] = {} | 130 handler[k] = {} |
| 126 else | 131 else |
| 127 handler[k] = mod.Tracker[k] | 132 handler[k] = M.Tracker[k] |
| 128 end | 133 end |
| 129 else | 134 else |
| 130 print(name, 'has its own', k) | 135 print(name, 'has its own', k) |
| 131 end | 136 end |
| 132 end | 137 end |
| 133 print('|cFFFF4400'..tostring(name)..'|r:') | 138 print('|cFFFF4400'..tostring(name)..'|r:') |
| 134 for k, v in pairs(handler) do | 139 for k, v in pairs(handler) do |
| 135 print(string.format("%24s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v))) | 140 print(string.format("%24s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v))) |
| 136 end | 141 end |
| 137 mod[name] = handler | 142 M[name] = handler |
| 138 mod.orderedHandlers[index] = handler | 143 M.orderedHandlers[index] = handler |
| 139 return true | 144 return true |
| 140 end | 145 end |
| 141 | 146 |
| 142 mod.Tracker = setmetatable({}, { | 147 M.Tracker = setmetatable({}, { |
| 143 __call = CreateHandler, | 148 __call = CreateHandler, |
| 144 __tostring = function() return 'DEFAULT_TRACKING_HANDLER' end | 149 __tostring = function() return 'DEFAULT_TRACKING_HANDLER' end |
| 145 }) | 150 }) |
| 146 local Tracker = mod.Tracker | 151 local Tracker = M.Tracker |
| 147 Tracker.numWatched = 0 --- number of entries being handled | 152 Tracker.numWatched = 0 --- number of entries being handled |
| 148 Tracker.numBlocks = 0 --- number of blocks created | 153 Tracker.numBlocks = 0 --- number of blocks created |
| 149 Tracker.actualBlocks = 0 --- number of blocks in use | 154 Tracker.actualBlocks = 0 --- number of blocks in use |
| 150 | 155 |
| 151 Tracker.freeBlocks = {} --- block heap | 156 Tracker.freeBlocks = {} --- block heap |
| 167 if #handler.freeBlocks >= 1 then | 172 if #handler.freeBlocks >= 1 then |
| 168 block = handler.freeBlocks[#handler.freeBlocks] | 173 block = handler.freeBlocks[#handler.freeBlocks] |
| 169 handler.freeBlocks[#handler.freeBlocks] = nil | 174 handler.freeBlocks[#handler.freeBlocks] = nil |
| 170 else | 175 else |
| 171 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock') | 176 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock') |
| 172 block.SetStyle = mod.SetBlockStyle | 177 block.SetStyle = M.SetBlockStyle |
| 173 block:ClearAllPoints() -- making sure the anchors are clear in case they get added for some other template usage | 178 block.Select = handler.Select |
| 179 block.Open = handler.Open | |
| 180 block.Remove = handler.Remove | |
| 181 block.Link = handler.Link | |
| 182 block:SetScript('OnMouseUp', handler.OnMouseUp) | |
| 183 block:SetScript('OnMouseDown', handler.OnMouseDown) | |
| 184 block:ClearAllPoints() | |
| 174 end | 185 end |
| 175 | 186 |
| 176 handler.usedBlocks[blockIndex] = block | 187 handler.usedBlocks[blockIndex] = block |
| 177 end | 188 end |
| 178 return handler.usedBlocks[blockIndex] | 189 return handler.usedBlocks[blockIndex] |
| 179 end | 190 end |
| 180 | 191 |
| 181 function mod:OnInitialize() | 192 function M:OnInitialize() |
| 182 self.InitializeTrackers() | 193 self.InitializeWrapper() |
| 183 self.InitializeXPTracker() | 194 self.InitializeXPTracker() |
| 184 mod.SetEvents() | 195 M.SetEvents() |
| 185 ObjectiveTrackerFrame:UnregisterAllEvents() | 196 ObjectiveTrackerFrame:UnregisterAllEvents() |
| 186 ObjectiveTrackerFrame:Hide() | 197 ObjectiveTrackerFrame:Hide() |
| 187 | 198 |
| 188 end | 199 end |
| 189 | 200 |
