Mercurial > wow > buffalo2
comparison ObjectiveTracker/Default.lua @ 44:756e8aeb040b
- Default.lua
- simplified the response to SuperTrackedQuestID changes
- tag icons work again
| author | Nenue |
|---|---|
| date | Mon, 25 Apr 2016 19:37:13 -0400 |
| parents | ObjectiveTracker/Update.lua@9480bd904f4c |
| children | dd1ae565f559 |
comparison
equal
deleted
inserted
replaced
| 43:9480bd904f4c | 44:756e8aeb040b |
|---|---|
| 1 --- ${PACKAGE_NAME} | |
| 2 -- @file-author@ | |
| 3 -- @project-revision@ @project-hash@ | |
| 4 -- @file-revision@ @file-hash@ | |
| 5 -- Created: 4/17/2016 7:33 AM | |
| 6 --- These are the first layer of methods invoked by event handlers | |
| 7 | |
| 8 local B = select(2,...).frame | |
| 9 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | |
| 10 local Devian = Devian | |
| 11 local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band | |
| 12 local IsResting, UnitXP, UnitXPMax, GetXPExhaustion, tinsert, tremove = IsResting, UnitXP, UnitXPMax, GetXPExhaustion, table.insert, table.remove | |
| 13 local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent | |
| 14 local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText | |
| 15 local PERCENTAGE_STRING, GetQuestProgressBarPercent = PERCENTAGE_STRING, GetQuestProgressBarPercent | |
| 16 local Default, AutoQuest, Quest, Bonus, Cheevs = T.DefaultHandler, T.AutoQuest, T.Quest, T.Bonus, T.Cheevs | |
| 17 local InCombatLockdown, format, lshift, CreateFrame = InCombatLockdown, format, bit.lshift, CreateFrame | |
| 18 local IsModifiedClick, ChatEdit_GetActiveWindow = IsModifiedClick, ChatEdit_GetActiveWindow | |
| 19 local print = B.print('Tracker') | |
| 20 local oprint = B.print('Objectives') | |
| 21 local bprint = B.print('Block') | |
| 22 local tprint = B.print('Tracker') | |
| 23 local lprint = B.print('Line') | |
| 24 local unitLevel = 1 | |
| 25 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON | |
| 26 local debug = false | |
| 27 | |
| 28 --- FRAMES | |
| 29 local Wrapper = _G.VeneerObjectiveWrapper | |
| 30 local Scroller = Wrapper.scrollArea | |
| 31 local Scroll = _G.VeneerObjectiveScroll | |
| 32 local orderedHandlers = T.orderedHandlers | |
| 33 local orderedNames = T.orderedNames | |
| 34 | |
| 35 | |
| 36 --- Placing the Update functions here since they shouldn't be messing with schema stuff | |
| 37 local currentPosition, anchorFrame, anchorPoint | |
| 38 --- Positioning and stuff | |
| 39 local tick = 0 | |
| 40 local initReason = OBJECTIVE_TRACKER_UPDATE_ALL | |
| 41 local requiresInit | |
| 42 function T:Update (reason, ...) | |
| 43 if not B.Conf.VeneerObjectiveWrapper.enabled then | |
| 44 return | |
| 45 end | |
| 46 tick = tick + 1 | |
| 47 local print = tprint | |
| 48 local hasStuff = false | |
| 49 local insertingStuff = false | |
| 50 | |
| 51 if initReason then | |
| 52 reason = initReason | |
| 53 initReason = nil | |
| 54 elseif not reason then | |
| 55 reason = OBJECTIVE_TRACKER_UPDATE_ALL | |
| 56 end | |
| 57 print(format('|cFFBB0066Update:|r |cFFFF%04X%d|r ', tick, lshift(reason, 4)), reason, ...) | |
| 58 currentPosition = 0 | |
| 59 | |
| 60 for id, handler in pairs(T.orderedHandlers) do | |
| 61 local frame = handler.frame | |
| 62 | |
| 63 print('') | |
| 64 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then | |
| 65 insertingStuff = handler:UpdateTracker(reason, ...) | |
| 66 else | |
| 67 print(' |cFFFF4400Update:|r skipping',handler.name) | |
| 68 end | |
| 69 | |
| 70 if handler.numWatched >= 1 then | |
| 71 hasStuff = true | |
| 72 currentPosition = currentPosition + 1 | |
| 73 Default.AddTracker(handler, frame, currentPosition) | |
| 74 frame.wasEmpty = nil | |
| 75 else | |
| 76 frame.destinationOffset = 0 | |
| 77 if not frame.wasEmpty and not frame.fadeOut:IsPlaying() then | |
| 78 frame.fadeOut:Play() | |
| 79 end | |
| 80 frame.wasEmpty = true | |
| 81 end | |
| 82 end | |
| 83 | |
| 84 -- do these whenever there is content or content is being added | |
| 85 if hasStuff or insertingStuff then | |
| 86 T:FinishWrapper() | |
| 87 end | |
| 88 Quest.GetClosest() | |
| 89 T.UpdateActionButtons(reason) | |
| 90 end | |
| 91 | |
| 92 Default.UpdateTracker = function (handler, reason, id, isNew) | |
| 93 local print = handler.print | |
| 94 local frame = handler.frame | |
| 95 local blockIndex = 0 | |
| 96 print('MODULE:'..handler.name, 'message:', reason, 'id:', id, (isNew and '|cFF88FF88' or '|cFF555555')..'isNew|r') | |
| 97 handler.updateReason = reason | |
| 98 local numWatched, numAll, watchTable = handler:GetNumWatched(id, isNew) | |
| 99 | |
| 100 if numWatched >= 1 then | |
| 101 if watchTable then | |
| 102 print(' WatchList', ' n ID Obj wID Log Blk') | |
| 103 for i, w in ipairs(watchTable) do | |
| 104 print(' WatchList', format('%2d => %6d %3d %3d %3s %s', i, w.id, w.numObjectives, w.watchIndex, (w.logIndex or ''), (handler.InfoBlock[w.id] and handler.InfoBlock[w.id]:GetName() or ''))) | |
| 105 end | |
| 106 end | |
| 107 end | |
| 108 | |
| 109 handler.numWatched = numWatched | |
| 110 handler.numAll = numAll | |
| 111 handler.numBlocks = 0 | |
| 112 handler.currentBlock = 0 | |
| 113 handler.currentAnchor = frame.titlebg | |
| 114 for blockIndex = 1, numWatched do | |
| 115 local currentBlock = handler:UpdateBlock(blockIndex, id, isNew) | |
| 116 if currentBlock then | |
| 117 handler:AddBlock(currentBlock) | |
| 118 else | |
| 119 print(' |cFF'..handler.internalColor..'finished|r @', blockIndex) | |
| 120 break -- done with quest stuff | |
| 121 end | |
| 122 end | |
| 123 | |
| 124 local numBlocks = handler.numBlocks | |
| 125 local used = handler.usedBlocks | |
| 126 local free = handler.freeBlocks | |
| 127 print(format('#### %s ## |cFFFF8800%04X|r --- blocks |cFFFF8800%d|r, (used/free: |cFFFF8800%d|r/|cFFFF8800%d|r)', handler.name, band(reason, handler.updateReasonModule + handler.updateReasonEvents, reason), numBlocks, #used, #free)) | |
| 128 | |
| 129 return numWatched, numAll | |
| 130 end | |
| 131 | |
| 132 Default.UpdateBlock = function (handler, index) | |
| 133 --@debug@ | |
| 134 local print = bprint -- @end-debug@ | |
| 135 if not index then | |
| 136 return | |
| 137 end | |
| 138 local info = handler.WatchList[index] -- should match up with whatever the internal watch list has | |
| 139 if not info then | |
| 140 return | |
| 141 end | |
| 142 local frame = handler.frame | |
| 143 local block = handler:GetBlock(info.id) | |
| 144 | |
| 145 --@debug@ | |
| 146 handler.print('UpdateBlock', '|cFF00FFFF'..index..'|r|cFF0099FF', info.id ,'|r', (block.isAnimating and 'animating' or 'static'))--@end-debug@ | |
| 147 if block.isAnimating then | |
| 148 -- Nothing to do, leave it as is | |
| 149 return block | |
| 150 end | |
| 151 | |
| 152 block.handler = handler | |
| 153 block.info = info | |
| 154 info.blockIndex = index | |
| 155 --@debug@ | |
| 156 local keyInfo--@end-debug@ | |
| 157 if info.id then | |
| 158 handler.InfoBlock[info.id] = block | |
| 159 --@debug@ | |
| 160 keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'InfoBlock[' .. info.id .. '] = *' .. block:GetName():gsub('%D', '') --@end-debug@ | |
| 161 end | |
| 162 if info.logIndex then | |
| 163 handler.LogBlock[info.logIndex] = block | |
| 164 --@debug@ | |
| 165 keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'LogBlock[' .. info.logIndex .. '] = ' .. block:GetName():gsub('%D', '')--@end-debug@ | |
| 166 end | |
| 167 if info.watchIndex then | |
| 168 handler.WatchBlock[info.watchIndex] = block | |
| 169 --@debug@ | |
| 170 keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'WatchBlock[' .. info.watchIndex .. '] = ' .. block:GetName():gsub('%D', '')--@end-debug@ | |
| 171 end | |
| 172 --@debug@ | |
| 173 if keyInfo then print(' assigned', keyInfo) end--@end-debug@ | |
| 174 handler.BlockInfo[index] = info | |
| 175 block.endPoint = block.titlebg | |
| 176 block.attachmentHeight = 0 | |
| 177 block.currentLine = 0 | |
| 178 local attachments, override_schema = handler:UpdateObjectives(block, block.schema) | |
| 179 | |
| 180 | |
| 181 block.title:SetText(info.title) | |
| 182 | |
| 183 if info.specialItem and not info.itemButton then | |
| 184 --@debug@ | |
| 185 print(' - |cFF00FFFFgenerating item button for info set')--@end-debug@ | |
| 186 info.itemButton = T.SetItemButton(block, info) | |
| 187 end | |
| 188 | |
| 189 | |
| 190 if info.selected then | |
| 191 block.SelectionOverlay:Show() | |
| 192 else | |
| 193 block.SelectionOverlay:Hide() | |
| 194 end | |
| 195 | |
| 196 if info.tagInfo then | |
| 197 handler:AddTags(block, info.tagInfo, info.tagCoords) | |
| 198 end | |
| 199 | |
| 200 if override_schema then | |
| 201 block.schema = override_schema | |
| 202 elseif info.schema then | |
| 203 block.schema = info.schema | |
| 204 end | |
| 205 return block | |
| 206 end | |
| 207 | |
| 208 Default.UpdateObjectives = function(handler, block, block_schema, displayObjectives) | |
| 209 local print = lprint | |
| 210 displayObjectives = displayObjectives or true | |
| 211 block_schema = block_schema or block.schema | |
| 212 local info = block.info | |
| 213 print(' |cFF00FF00default.objectives', block:GetName()) | |
| 214 -- reset the starting positions | |
| 215 local text, attachment, template | |
| 216 local numAttachments = 0 | |
| 217 | |
| 218 if info.objectives and displayObjectives then | |
| 219 for i, data in ipairs(info.objectives) do | |
| 220 text, attachment, template = handler:UpdateLine(block, data) | |
| 221 if text or attachment then | |
| 222 local line = handler:GetLine(block) | |
| 223 line.height = 0 | |
| 224 print(' |cFF88FF00#', i, data.type, text, attachment) | |
| 225 handler:AddLine(block, text, attachment, template) | |
| 226 end | |
| 227 if attachment then | |
| 228 numAttachments = numAttachments + 1 | |
| 229 end | |
| 230 end | |
| 231 end | |
| 232 | |
| 233 if block.currentLine < block.numLines then | |
| 234 print(' - cull', block.currentLine, block.numLines) | |
| 235 for i = block.currentLine + 1, block.numLines do | |
| 236 print(' - hide |cFFFF0088'..i..'|r', block.lines[i]) | |
| 237 block.lines[i]:ClearAllPoints() | |
| 238 block.lines[i]:Hide() | |
| 239 end | |
| 240 end | |
| 241 | |
| 242 if block.currentLine > 0 then | |
| 243 block.attachmentHeight = block.attachmentHeight | |
| 244 print(' |cFF00FF00attachment:', block.attachmentHeight) | |
| 245 end | |
| 246 return numAttachments, block_schema | |
| 247 end | |
| 248 | |
| 249 Default.UpdateLine = function(handler, block, data) | |
| 250 return block.info.description, nil, 'default' | |
| 251 end | |
| 252 | |
| 253 Default.Select = function(handler, block) | |
| 254 T:Update() | |
| 255 end | |
| 256 Default.Open = function(handler, block) | |
| 257 T:Update(handler.updateReasonModule) | |
| 258 end | |
| 259 Default.Remove = function(handler, block) | |
| 260 T:Update(handler.updateReasonModule) | |
| 261 end | |
| 262 Default.Report = function(handler, block) | |
| 263 print('Stats:', handler.numWatched,'items tracked,', handler.numBlocks,'blocks assigned.') | |
| 264 end | |
| 265 | |
| 266 function Default:OnMouseUp (button) | |
| 267 print(self.handler.name, button, IsModifiedClick('CHATLINK'), IsModifiedClick("QUESTWATCHTOGGLE")) | |
| 268 if button == 'LeftButton' then | |
| 269 if IsModifiedClick("CHATLINK") and ChatEdit_GetActiveWindow() then | |
| 270 self.Link(self.handler, self) | |
| 271 elseif IsModifiedClick("QUESTWATCHTOGGLE") then | |
| 272 self.Remove(self.handler, self) | |
| 273 else | |
| 274 self.Select(self.handler, self) | |
| 275 end | |
| 276 elseif button == 'RightButton' then | |
| 277 self.Open(self.handler, self) | |
| 278 end | |
| 279 self.initialButton = nil | |
| 280 self.modChatLink = nil | |
| 281 self.modQuestWatch = nil | |
| 282 --T:Update(self.handler.updateReasonModule) | |
| 283 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r') | |
| 284 end | |
| 285 function Default:OnMouseDown (button) | |
| 286 --print(self.info.title) | |
| 287 end |
