annotate ObjectiveTracker/Update.lua @ 43:9480bd904f4c

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