Mercurial > wow > buffalo2
comparison ObjectiveFrame.lua @ 19:605e8f0e46db
ObjectiveCore / Style / Events / Frame
- polishing the execution path for better performance
- make use of the Blizzard_ObjectiveTracker bitfield values to ensure compatibility in possible secure hooks
- avoid full updates when possible (using said bitfield values to indicate targeted sections)
- extreme streamlining of event handling layout: specific reason updates are invoked from API hooks; broader updates are invoked by when the event listener catches something vague like 'QUEST_LOG_UPDATE'
| author | Nenue |
|---|---|
| date | Wed, 06 Apr 2016 07:38:35 -0400 |
| parents | d1812fb10ae6 |
| children | d5ee940de273 |
comparison
equal
deleted
inserted
replaced
| 18:d1812fb10ae6 | 19:605e8f0e46db |
|---|---|
| 6 local B = select(2,...).frame | 6 local B = select(2,...).frame |
| 7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | 7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') |
| 8 local ipairs, max, min, unpack, floor, pairs, tostring, type, band = ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band | 8 local ipairs, max, min, unpack, floor, pairs, tostring, type, band = ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band |
| 9 local IsResting, UnitXP, UnitXPMax, GetXPExhaustion = IsResting, UnitXP, UnitXPMax, GetXPExhaustion | 9 local IsResting, UnitXP, UnitXPMax, GetXPExhaustion = IsResting, UnitXP, UnitXPMax, GetXPExhaustion |
| 10 local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent | 10 local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent |
| 11 local Quest, Bonus, Cheevs = mod.Quest, mod.Bonus, mod.Cheevs | 11 local DefaultTracker, Quest, Bonus, Cheevs = mod.DefaultTracker, mod.Quest, mod.Bonus, mod.Cheevs |
| 12 local CreateFrame = CreateFrame | 12 local CreateFrame = CreateFrame |
| 13 local print = B.print('Objectives') | 13 local print = B.print('ObjWrapper') |
| 14 local unitLevel = 1 | 14 local unitLevel = 1 |
| 15 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON | |
| 15 -------------------------------------------------------------------- | 16 -------------------------------------------------------------------- |
| 16 --- Global frame layout | 17 --- Global frame layout |
| 17 -------------------------------------------------------------------- | 18 -------------------------------------------------------------------- |
| 18 | 19 |
| 19 --- Upvalues | 20 --- Upvalues |
| 39 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' | 40 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' |
| 40 local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24 | 41 local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24 |
| 41 local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2 | 42 local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2 |
| 42 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0} | 43 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0} |
| 43 | 44 |
| 44 mod.InitializeWrapper = function() | 45 local band = bit.band |
| 45 | 46 local currentPosition, anchorFrame, anchorPoint |
| 46 mod.SetBlockStyle(Scroller, 'Scroller', 'Normal') | 47 function mod:Update (reason, dataID) |
| 47 mod.SetBlockStyle(Scroller, 'Scroll', 'Normal') | 48 local updateWrapper = 0 |
| 48 mod.SetBlockStyle(Wrapper, 'Wrapper', 'Normal') | 49 local hasStuff |
| 49 | 50 local insertingStuff |
| 50 for i, name in ipairs(orderedNames) do | 51 reason = reason or OBJECTIVE_TRACKER_UPDATE_REASON |
| 51 if not mod.orderedHandlers[i] then | 52 currentPosition = 0 |
| 52 if mod.Tracker(name, i) then | 53 anchorPoint = 'TOPLEFT' |
| 53 local handler = mod[name] | 54 anchorFrame = Scroll |
| 54 local tracker = CreateFrame('Frame', 'Veneer'..name..'Tracker', Scroll, 'VeneerTrackerTemplate') | 55 |
| 55 tracker.title:SetText(handler.displayName) | 56 local wrapperHeight = 0 |
| 56 mod.SetBlockStyle(tracker, 'Tracker', 'Normal') | 57 for id, handler in pairs(mod.orderedHandlers) do |
| 57 handler.Tracker = tracker | 58 local frame = handler.frame |
| 58 mod.orderedTrackers[i] = tracker | 59 |
| 59 mod.namedTrackers[name] = tracker | 60 print(format('|cFF00FFFFbitcheck (%04X vs %04x+%04x):|r', reason, handler.updateReasonModule, handler.updateReasonEvents), band(reason, handler.updateReasonModule + handler.updateReasonEvents)) |
| 60 mod.indexedTrackers[handler] = tracker | 61 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then |
| 61 print('created new tracker frames for new handler') | 62 handler:Update(reason, dataID) |
| 62 end | 63 print('|cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched) |
| 63 end | 64 insertingStuff = true |
| 64 end | 65 else |
| 65 | 66 print('|cFFFF0088'..id..'|r', 'no reason') |
| 66 Scroller:SetScrollChild(Scroll) | 67 end |
| 67 | 68 |
| 68 mod.InitializeWrapperWidgets() | 69 if handler.numWatched >= 1 then |
| 69 if B.Conf.ObjectiveTrackerMinimized then | 70 hasStuff = true |
| 70 Scroller_OnShow(Scroller) | 71 currentPosition = currentPosition + 1 |
| 71 end | 72 frame:SetParent(Scroll) |
| 72 mod.UpdateWrapperStyle() | 73 frame:SetPoint('TOPLEFT', anchorFrame, anchorPoint, 0, 0) |
| 73 end | 74 print(' |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint) |
| 74 | 75 anchorFrame = handler.frame |
| 75 mod.InitializeXPTracker = function() | 76 anchorPoint = 'BOTTOMLEFT' |
| 76 local XPBar = Wrapper.XPBar | 77 |
| 77 if UnitLevel('player') == 100 then | 78 print('current frame height:', frame.height) |
| 78 XPBar:Hide() | 79 wrapperHeight = wrapperHeight + frame.height |
| 79 return | 80 print('|cFFFF0088total height:', wrapperHeight) |
| 80 end | 81 else |
| 81 | 82 handler.frame:Hide() |
| 82 --- xp bar | 83 end |
| 83 XPBar:SetWidth(mod.Conf.Wrapper.WrapperWidth - Wrapper.CloseButton:GetWidth()) | 84 end |
| 84 XPBar.statusbg:SetAllPoints(XPBar) | 85 |
| 85 XPBar:RegisterEvent('DISABLE_XP_GAIN') | 86 |
| 86 XPBar:RegisterEvent('ENABLE_XP_GAIN') | 87 if hasStuff or insertingStuff then |
| 87 XPBar:SetScript('OnEvent', mod.UpdateXP) | 88 |
| 88 | 89 print('updating height to', wrapperHeight) |
| 89 if not IsXPUserDisabled() then | 90 Wrapper:SetHeight(wrapperHeight) |
| 90 mod.EnableXP(XPBar) | 91 Scroller:SetHeight(wrapperHeight) |
| 91 else | 92 Scroll:SetHeight(wrapperHeight) |
| 92 mod.DisableXP(XPBar) | 93 print('|cFFFF8800Wrapper:', Wrapper:GetSize()) |
| 93 end | 94 for i = 1, Wrapper:GetNumPoints() do |
| 94 | 95 print(' ', Wrapper:GetPoint(i)) |
| 95 mod.UpdateXP(XPBar) | 96 end |
| 96 end | 97 print(' |cFF00FFFFScroller:', Scroller:GetSize()) |
| 97 | 98 for i = 1, Scroller:GetNumPoints() do |
| 98 mod.EnableXP = function(self) | 99 print(' ', Scroller:GetPoint(i)) |
| 99 self:RegisterEvent('PLAYER_XP_UPDATE') | 100 end |
| 100 self:RegisterEvent('PLAYER_LEVEL_UP') | 101 print(' |cFF00FFFFScroll:', Scroll:GetSize()) |
| 101 self:RegisterEvent('PLAYER_UPDATE_RESTING') | 102 for i = 1, Scroll:GetNumPoints() do |
| 102 self.statusbg:SetTexture(0,0,0,.25) | 103 print(' ', Scroll:GetPoint(i)) |
| 103 self:Show() | 104 end |
| 104 end | 105 |
| 105 | 106 Wrapper:Show() |
| 106 mod.DisableXP = function(self) | 107 Scroller:Show() |
| 107 self:UnregisterEvent('PLAYER_XP_UPDATE') | 108 Scroll:Show() |
| 108 self:UnregisterEvent('PLAYER_LEVEL_UP') | 109 end |
| 109 self:UnregisterEvent('PLAYER_UPDATE_RESTING') | 110 |
| 110 self.statusbg:SetTexture(0.5,0.5,0.5,0.5) | 111 end |
| 111 self:Hide() | 112 |
| 112 end | 113 DefaultTracker.GetBlock = function(handler, blockIndex) |
| 113 | 114 local block = handler.usedBlocks[blockIndex] |
| 114 mod.UpdateXP = function(self, event) | 115 if not handler.usedBlocks[blockIndex] then |
| 115 if event == 'DISABLE_XP_GAIN' then | 116 if #handler.freeBlocks >= 1 then |
| 116 mod.DisableXP(self) | 117 block = handler.freeBlocks[#handler.freeBlocks] |
| 117 elseif event == 'ENABLE_XP_GAIN' then | 118 handler.freeBlocks[#handler.freeBlocks] = nil |
| 118 mod.EnableXP(self) | 119 else |
| 119 end | 120 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock') |
| 120 | 121 block.SetStyle = mod.SetBlockStyle |
| 121 if not IsXPUserDisabled() then | 122 block.Select = handler.Select |
| 122 | 123 block.Open = handler.Open |
| 123 local xp = UnitXP('player') | 124 block.Remove = handler.Remove |
| 124 local xpmax = UnitXPMax('player') | 125 block.Link = handler.Link |
| 125 local rest = GetXPExhaustion() | 126 block:SetScript('OnMouseUp', handler.OnMouseUp) |
| 126 self.foreground:SetWidth((xp/xpmax) * self:GetWidth()) | 127 block:SetScript('OnMouseDown', handler.OnMouseDown) |
| 127 if rest then | 128 block.attachmentHeight = 0 |
| 128 self.rested:ClearAllPoints() | 129 block:ClearAllPoints() |
| 129 if xp == 0 then | 130 end |
| 130 self.rested:SetPoint('TOPLEFT', self, 'TOPLEFT', 0, 0) | 131 |
| 131 else | 132 handler.usedBlocks[blockIndex] = block |
| 132 self.rested:SetPoint('TOPLEFT', self.fg, 'TOPRIGHT', 0, 0) | 133 end |
| 133 end | 134 return handler.usedBlocks[blockIndex] |
| 134 | 135 end |
| 135 if (xp + rest) > xpmax then | 136 |
| 136 self.rested:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', 0, 0) | 137 DefaultTracker.Update = function (self, reason, dataID) |
| 137 else | 138 local tracker = self.frame |
| 138 self.rested:SetWidth((rest/xpmax) * self:GetWidth()) | |
| 139 end | |
| 140 self.rested:SetPoint('BOTTOM', self, 'BOTTOM') | |
| 141 self.rested:Show() | |
| 142 else | |
| 143 self.rested:Hide() | |
| 144 end | |
| 145 | |
| 146 if IsResting() then | |
| 147 self.statusbg:SetTexture(.2,.8,.2,.5) | |
| 148 else | |
| 149 self.statusbg:SetTexture(0,0,0,.25) | |
| 150 end | |
| 151 self.xpText:SetText(xp .. '/'.. xpmax .. (rest and (' ('..tostring(rest)..')') or '')) | |
| 152 end | |
| 153 end | |
| 154 | |
| 155 | |
| 156 | |
| 157 mod.UpdateTracker = function(handler) | |
| 158 local tracker = handler.Tracker | |
| 159 print('|cFFFF4400'..tracker:GetName().. '|r:Update()') | 139 print('|cFFFF4400'..tracker:GetName().. '|r:Update()') |
| 160 local blockIndex = 0 | 140 local blockIndex = 0 |
| 161 local trackerHeight = tracker.titleHeight | 141 local trackerHeight = 0 |
| 162 | 142 |
| 163 | 143 |
| 164 previousBlock = tracker.title | 144 self.currentAnchor = tracker.titlebg |
| 165 local numWatched = handler.GetNumWatched() | 145 local numWatched = self:GetNumWatched() |
| 166 local numBlocks = handler.numBlocks | 146 local numBlocks = self.numBlocks |
| 167 local actualBlocks = 0 | 147 local actualBlocks = 0 |
| 168 for watchIndex = 1, 25 do | 148 for watchIndex = 1, 25 do |
| 169 blockIndex = blockIndex + 1 | 149 blockIndex = blockIndex + 1 |
| 170 if watchIndex <= numWatched then | 150 if watchIndex <= numWatched then |
| 171 local info = handler:GetInfo(watchIndex) | 151 local info = self:GetInfo(watchIndex) |
| 172 if info then | 152 if info then |
| 173 local currentBlock = mod.UpdateTrackerBlock(handler, blockIndex, info) | 153 local currentBlock = self:UpdateBlock(blockIndex, info) |
| 174 previousBlock = currentBlock | 154 self.currentAnchor = currentBlock |
| 175 print(' |cFFFFFF00'..watchIndex..'|r', '|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height) | 155 print(' |cFFFFFF00'..watchIndex..'|r', '|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height) |
| 156 print(currentBlock:IsVisible()) | |
| 157 print(currentBlock:GetPoint(1)) | |
| 176 trackerHeight = trackerHeight + currentBlock.height | 158 trackerHeight = trackerHeight + currentBlock.height |
| 177 numBlocks = max(numBlocks, watchIndex) | 159 numBlocks = max(numBlocks, watchIndex) |
| 178 actualBlocks = actualBlocks + 1 | 160 actualBlocks = actualBlocks + 1 |
| 179 else | 161 else |
| 180 print(' |cFFFF0000Failed to draw info for index #'..watchIndex) | 162 print(' |cFFFF0000Failed to draw info for index #'..watchIndex) |
| 181 end | 163 end |
| 182 | 164 |
| 183 elseif watchIndex <= numBlocks then | 165 elseif watchIndex <= numBlocks then |
| 184 local used = handler.usedBlocks | 166 local used = self.usedBlocks |
| 185 local free = handler.freeBlocks | 167 local free = self.freeBlocks |
| 186 print('clean up dead quest block') | 168 print('clean up dead quest block') |
| 187 if used[blockIndex] then | 169 if used[blockIndex] then |
| 188 used[blockIndex]:Hide() | 170 used[blockIndex]:Hide() |
| 189 used[blockIndex]:ClearAllPoints() | 171 used[blockIndex]:ClearAllPoints() |
| 190 free[#free+1]= used[blockIndex] | 172 free[#free+1]= used[blockIndex] |
| 193 else | 175 else |
| 194 print(' |cFFFF9900END|r @', blockIndex) | 176 print(' |cFFFF9900END|r @', blockIndex) |
| 195 break -- done with quest stuff | 177 break -- done with quest stuff |
| 196 end | 178 end |
| 197 end | 179 end |
| 198 handler.numWatched = numWatched | 180 self.numWatched = numWatched |
| 199 handler.numBlocks = numBlocks | 181 self.numBlocks = numBlocks |
| 200 handler.actualBlocks = actualBlocks | 182 self.actualBlocks = actualBlocks |
| 201 handler:Report() | 183 self:Report() |
| 202 | 184 |
| 185 tracker.previousHeight = tracker.height | |
| 203 if numBlocks >= 1 then | 186 if numBlocks >= 1 then |
| 204 previousBlock = nil | 187 previousBlock = nil |
| 205 tracker.height = trackerHeight | 188 |
| 189 tracker.height = trackerHeight + tracker.titlebg:GetHeight() | |
| 190 tracker:SetHeight(tracker.height) | |
| 191 tracker:Show() | |
| 192 | |
| 193 print(tracker.height) | |
| 194 | |
| 206 else | 195 else |
| 207 tracker.height = 0 | 196 tracker.height = 0 |
| 197 tracker:Hide() | |
| 208 end | 198 end |
| 209 | 199 |
| 210 return tracker.numWatched, tracker.numAll | 200 return tracker.numWatched, tracker.numAll |
| 211 end | 201 end |
| 212 | 202 |
| 213 --- Updates the selected block frame to display the given info batch | 203 --- Updates the selected block frame to display the given info batch |
| 214 -- If `previousBlock` is set, it will attempt to anchor to that | 204 -- If `previousBlock` is set, it will attempt to anchor to that |
| 215 -- @param blockNum the ordered block to be updated, not a watchIndex value | 205 -- @param blockNum the ordered block to be updated, not a watchIndex value |
| 216 -- @param info the reference returned by the GetXInfo functions | 206 -- @param info the reference returned by the GetXInfo functions |
| 217 -- REMEMBER: t.info and questData[questID] are the same table | 207 -- REMEMBER: t.info and questData[questID] are the same table |
| 218 mod.UpdateTrackerBlock = function (handler, blockIndex, info) | 208 DefaultTracker.UpdateBlock = function (self, blockIndex, info) |
| 219 local print = B.print('BlockParse') | 209 local print = B.print('BlockParse') |
| 220 print(' Read list item |cFF00FFFF'..blockIndex..'|r') | 210 print(' Read list item |cFF00FFFF'..blockIndex..'|r') |
| 221 if not blockIndex or not info then | 211 if not blockIndex or not info then |
| 222 return | 212 return |
| 223 end | 213 end |
| 224 local tracker = handler.Tracker | 214 local frame = self.frame |
| 225 local t = handler:GetBlock(blockIndex) | 215 local t = self:GetBlock(blockIndex) |
| 226 t.handler = handler | 216 t.handler = self |
| 227 t.info = info | 217 t.info = info |
| 228 t.mainStyle = info.mainStyle or 'Normal' | 218 t.mainStyle = info.mainStyle or 'Normal' |
| 229 t.subStyle = info.subStyle | 219 t.subStyle = info.subStyle |
| 230 | 220 |
| 231 info.blockIndex = blockIndex | 221 info.blockIndex = blockIndex |
| 232 if info.questID then handler.QuestBlock[info.questID] = t end | 222 if info.questID then self.QuestBlock[info.questID] = t end |
| 233 if info.questLogIndex then handler.LogBlock[info.questLogIndex] = t end | 223 if info.questLogIndex then self.LogBlock[info.questLogIndex] = t end |
| 234 if info.watchIndex then handler.WatchBlock[info.watchIndex] = t end | 224 if info.watchIndex then self.WatchBlock[info.watchIndex] = t end |
| 235 handler.BlockInfo[blockIndex] = info | 225 self.BlockInfo[blockIndex] = info |
| 236 | |
| 237 | 226 |
| 238 t.attachmentHeight = 0 | 227 t.attachmentHeight = 0 |
| 239 | 228 if info.isComplete then |
| 240 | 229 if mod.AutoQuest.Info[info.questID] then |
| 241 | |
| 242 | |
| 243 | |
| 244 if info.isComplete == 1 then | |
| 245 if info.popupInfo then | |
| 246 t.status:SetText('(Click to Complete)') | 230 t.status:SetText('(Click to Complete)') |
| 231 t.status:Show() | |
| 247 else | 232 else |
| 248 t.status:SetText('Ready to turn in') | 233 t.status:SetText('Ready to turn in') |
| 234 t.status:Show() | |
| 249 end | 235 end |
| 250 elseif info.completed then | 236 elseif info.completed then |
| 251 t.status:SetText(nil) | 237 t.status:SetText(nil) |
| 238 t.status:Hide() | |
| 252 elseif info.numObjectives >= 1 then | 239 elseif info.numObjectives >= 1 then |
| 253 t.attachmentHeight = 0 | 240 t.attachmentHeight = 0 |
| 254 t.status:Show() | 241 t.status:Show() |
| 255 print(' lines to build:', info.numObjectives) | 242 print(' lines to parse:', info.numObjectives) |
| 256 local text = '' | 243 local text = '' |
| 257 | 244 |
| 258 mod.UpdateObjectives(t, info, text) | 245 mod.UpdateObjectives(t, info, text) |
| 246 print(' |cFF00FF00attachment', t.attachmentHeight) | |
| 259 elseif info.description then | 247 elseif info.description then |
| 260 t.status:SetText(info.description) | 248 t.status:SetText(info.description) |
| 249 t.status:Show() | |
| 261 else | 250 else |
| 262 t.status:SetText(nil) | 251 t.status:SetText(nil) |
| 252 t.status:Show() | |
| 263 end | 253 end |
| 264 t.title:SetText(info.title) | 254 t.title:SetText(info.title) |
| 265 print(' ', t.status:CanWordWrap(), t.status:GetStringHeight()) | |
| 266 | 255 |
| 267 | 256 |
| 268 if info.specialItem and not info.itemButton then | 257 if info.specialItem and not info.itemButton then |
| 269 print(' - |cFF00FFFFgenerating item button for info set') | 258 print(' - |cFF00FFFFgenerating item button for info set') |
| 270 info.itemButton = mod.SetItemButton(t, info) | 259 info.itemButton = mod.SetItemButton(t, info) |
| 271 else | 260 else |
| 272 --info.itemButton = nil | 261 --info.itemButton = nil |
| 273 end | 262 end |
| 274 | 263 |
| 275 if previousBlock then | 264 if self.currentAnchor then |
| 276 t:SetPoint('TOPLEFT', previousBlock, 'BOTTOMLEFT', 0, 0) | 265 t:SetPoint('TOPLEFT', self.currentAnchor, 'BOTTOMLEFT', 0, 0) |
| 277 t:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) | 266 t:SetPoint('RIGHT', frame,'RIGHT', 0, 0) |
| 278 print(' anchor to|cFF0088FF', previousBlock:GetName()) | 267 print(' anchor to|cFF0088FF', self.currentAnchor:GetName()) |
| 279 end | 268 end |
| 280 | 269 |
| 281 | 270 |
| 282 --- metrics are calculated in SetStyle | 271 --- metrics are calculated in SetStyle |
| 283 t:SetStyle('TrackerBlock', handler.name, t.mainStyle, t.subStyle) | 272 t:SetStyle('TrackerBlock', self.name, t.mainStyle, t.subStyle) |
| 273 print(' |cFFFFFF00height|r', t.height) | |
| 284 t:Show() | 274 t:Show() |
| 285 | 275 |
| 286 print(' |cFF00FFFF)|r -> ', t, t:GetHeight()) | 276 print(' |cFF00FFFF)|r -> ', t, t:GetHeight()) |
| 287 | 277 |
| 288 local tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', t, 'TOPRIGHT' | 278 local tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', t, 'TOPRIGHT' |
| 336 t.debugText:SetText(tostring(blockIndex) .. '\n' .. tostring(info.itemButton and info.itemButton:GetName()) .. "\n" .. (tostring(t.mainStyle) .. '/' .. tostring(t.subStyle))) | 326 t.debugText:SetText(tostring(blockIndex) .. '\n' .. tostring(info.itemButton and info.itemButton:GetName()) .. "\n" .. (tostring(t.mainStyle) .. '/' .. tostring(t.subStyle))) |
| 337 end]] | 327 end]] |
| 338 return t | 328 return t |
| 339 end | 329 end |
| 340 | 330 |
| 331 | |
| 332 | |
| 341 mod.UpdateObjectives = function(block, info, text) | 333 mod.UpdateObjectives = function(block, info, text) |
| 342 local print = B.print('BlockLine') | 334 local print = B.print('BlockLine') |
| 343 print(' |cFF00FF00objective updates for', block:GetName()) | 335 print(' |cFF00FF00objective updates for', block:GetName()) |
| 344 | 336 |
| 345 local attachmentHeight = block.attachmentHeight | 337 local attachmentHeight = block.attachmentHeight |
| 338 print(attachmentHeight) | |
| 346 if info.description and not(info.earnedBy or info.isComplete) then | 339 if info.description and not(info.earnedBy or info.isComplete) then |
| 347 print(' -- has description text:', select('#', info.description), info.description) | 340 print(' -- has description text:', select('#', info.description), info.description) |
| 348 text = info.description | 341 text = info.description |
| 349 end | 342 end |
| 350 local completionScore, completionMax = 0, 0 | 343 local completionScore, completionMax = 0, 0 |
| 351 | 344 |
| 352 for i, line in ipairs(info.objectives) do | 345 for i, line in ipairs(info.objectives) do |
| 346 print(attachmentHeight) | |
| 353 print(' |cFF88FF00objective', i) | 347 print(' |cFF88FF00objective', i) |
| 354 block.handler.ParseObjective(line, info) | 348 block.handler.ParseObjective(line, info) |
| 355 | 349 |
| 356 if line.title then | 350 if line.title then |
| 357 info.title = line.title | 351 info.title = line.title |
| 358 line.title = nil | 352 line.title = nil |
| 359 end | 353 end |
| 360 | 354 |
| 361 if line.widget then | 355 if line.widget then |
| 362 if attachmentHeight == 0 then | 356 if attachmentHeight == 0 then |
| 363 attachmentHeight = block.status.spacing | 357 attachmentHeight = (block.status.spacing or block.status:GetSpacing()) * 2 |
| 358 --print(attachmentHeight) | |
| 364 end | 359 end |
| 365 line.widget:Show() | 360 line.widget:Show() |
| 366 line.widget:SetParent(block) | 361 line.widget:SetParent(block) |
| 367 line.widget:SetPoint('TOPLEFT', block.status, 'BOTTOMLEFT', 0, -attachmentHeight ) | 362 line.widget:SetPoint('TOPLEFT', block.status, 'BOTTOMLEFT', 0, -attachmentHeight ) |
| 368 print(' has a widget, height is', line.widget.height) | 363 print(' has a widget, height is', line.widget.height) |
| 375 print(' has text') | 370 print(' has text') |
| 376 text = text .. ((text == '') and "" or "\n") .. '|cFF'..line.displayColor.. line.displayText .. '|r' | 371 text = text .. ((text == '') and "" or "\n") .. '|cFF'..line.displayColor.. line.displayText .. '|r' |
| 377 end | 372 end |
| 378 end | 373 end |
| 379 | 374 |
| 375 | |
| 376 | |
| 380 block.completionScore = completionScore / completionMax | 377 block.completionScore = completionScore / completionMax |
| 381 block.attachmentHeight = attachmentHeight | 378 block.attachmentHeight = attachmentHeight |
| 382 | 379 |
| 383 if #text >= 1 then | 380 if #text >= 1 then |
| 384 block.status:SetText(text) | 381 block.status:SetText(text) |
| 394 -- defines the following variables | 391 -- defines the following variables |
| 395 -- * height - height of whatever display widget is involved in conveying the task | 392 -- * height - height of whatever display widget is involved in conveying the task |
| 396 -- * lines - number of non-wrapped text lines to account for line space; may be discarded depending on things | 393 -- * lines - number of non-wrapped text lines to account for line space; may be discarded depending on things |
| 397 -- * money - boolean that determines listening for money events or not | 394 -- * money - boolean that determines listening for money events or not |
| 398 -- * progress - number ranging 0 to 2 indicating none/partial/full completion respectively | 395 -- * progress - number ranging 0 to 2 indicating none/partial/full completion respectively |
| 399 mod.Tracker.ParseObjective = function(line, info) | 396 DefaultTracker.ParseObjective = function(line, info) |
| 400 | 397 |
| 401 if line.finished then | 398 if line.finished then |
| 402 line.progress = 2 | 399 line.progress = 2 |
| 403 elseif line.quantity > 0 then | 400 elseif line.quantity > 0 then |
| 404 line.progress = 1 | 401 line.progress = 1 |
| 480 | 477 |
| 481 | 478 |
| 482 mod.Quest.numButtons = 0 | 479 mod.Quest.numButtons = 0 |
| 483 local usedButtons = mod.Quest.itemButtons | 480 local usedButtons = mod.Quest.itemButtons |
| 484 local freeButtons = mod.Quest.freeButtons | 481 local freeButtons = mod.Quest.freeButtons |
| 482 --[=[ | |
| 485 mod.UpdateWrapper = function(reason) | 483 mod.UpdateWrapper = function(reason) |
| 486 print('|cFF00FFFFUpdateWrapper:|r', reason) | 484 print('|cFF00FFFFUpdateWrapper:|r', reason) |
| 487 unitLevel = UnitLevel('player') | 485 unitLevel = UnitLevel('player') |
| 488 wrapperWidth = mod.Conf.Wrapper.WrapperWidth | 486 wrapperWidth = mod.Conf.Wrapper.WrapperWidth |
| 489 scrollWidth = mod.Conf.Wrapper.WrapperWidth | 487 scrollWidth = mod.Conf.Wrapper.WrapperWidth |
| 490 local wrapperBlocks = 0 | 488 local wrapperBlocks = 0 |
| 491 -- Update scroll child vertical size | 489 -- Update scroll child vertical size |
| 492 scrollHeight = 0 | 490 scrollHeight = 0 |
| 493 for i, handler in ipairs(orderedHandlers) do | 491 for i, handler in ipairs(orderedHandlers) do |
| 494 mod.UpdateTracker(handler) | 492 mod.UpdateTracker(handler) |
| 495 local tracker = handler.Tracker | 493 local frame = handler.frame |
| 496 if handler.actualBlocks >= 1 then | 494 if handler.actualBlocks >= 1 then |
| 497 tracker:SetParent(Scroll) | 495 frame:SetParent(Scroll) |
| 498 tracker:SetPoint('TOPLEFT', Scroll, 'TOPLEFT', 0, - scrollHeight) | 496 frame:SetPoint('TOPLEFT', Scroll, 'TOPLEFT', 0, - scrollHeight) |
| 499 tracker:SetSize(wrapperWidth, tracker.height) | 497 frame:SetSize(wrapperWidth, frame.height) |
| 500 print('|cFF00FFFF'..tracker:GetName()..'|r h:|cFF00FF00', tracker.height, '|r y:|cFF00FF00', -scrollHeight) | 498 print('|cFF00FFFF'..frame:GetName()..'|r h:|cFF00FF00', frame.height, '|r y:|cFF00FF00', -scrollHeight) |
| 501 scrollHeight = scrollHeight + tracker.height | 499 scrollHeight = scrollHeight + frame.height |
| 502 tracker:Show() | 500 frame:Show() |
| 503 else | 501 else |
| 504 tracker:Hide() | 502 frame:Hide() |
| 505 end | 503 end |
| 506 wrapperBlocks = wrapperBlocks + handler.actualBlocks | 504 wrapperBlocks = wrapperBlocks + handler.actualBlocks |
| 507 end | 505 end |
| 508 print('final scrollHeight:', scrollHeight) | 506 print('final scrollHeight:', scrollHeight) |
| 509 | 507 |
| 559 ) | 557 ) |
| 560 --]] | 558 --]] |
| 561 mod.UpdateActionButtons() | 559 mod.UpdateActionButtons() |
| 562 | 560 |
| 563 end | 561 end |
| 562 --]=] | |
| 564 | 563 |
| 565 --- Queue any active item buttons for update for that frame | 564 --- Queue any active item buttons for update for that frame |
| 566 mod.UpdateActionButtons = function(updateReason) | 565 mod.UpdateActionButtons = function(updateReason) |
| 567 Scroller.snap_upper = 0 | 566 Scroller.snap_upper = 0 |
| 568 Scroller.snap_lower = 0 | 567 Scroller.snap_lower = 0 |
