Mercurial > wow > buffalo2
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ObjectiveTracker/Update.lua Mon Apr 25 13:51:58 2016 -0400 @@ -0,0 +1,289 @@ +--- ${PACKAGE_NAME} +-- @file-author@ +-- @project-revision@ @project-hash@ +-- @file-revision@ @file-hash@ +-- Created: 4/17/2016 7:33 AM +--- Baseline update work +local B = select(2,...).frame +local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') +local Devian = Devian +local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band +local IsResting, UnitXP, UnitXPMax, GetXPExhaustion, tinsert, tremove = IsResting, UnitXP, UnitXPMax, GetXPExhaustion, table.insert, table.remove +local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent +local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText +local PERCENTAGE_STRING, GetQuestProgressBarPercent = PERCENTAGE_STRING, GetQuestProgressBarPercent +local Default, AutoQuest, Quest, Bonus, Cheevs = T.DefaultHandler, T.AutoQuest, T.Quest, T.Bonus, T.Cheevs +local InCombatLockdown, format, lshift, CreateFrame = InCombatLockdown, format, bit.lshift, CreateFrame +local IsModifiedClick, ChatEdit_GetActiveWindow = IsModifiedClick, ChatEdit_GetActiveWindow +local print = B.print('Tracker') +local oprint = B.print('Objectives') +local bprint = B.print('Block') +local tprint = B.print('Tracker') +local lprint = B.print('Line') +local unitLevel = 1 +local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON +local debug = false + +--- FRAMES +local Wrapper = _G.VeneerObjectiveWrapper +local Scroller = Wrapper.scrollArea +local Scroll = _G.VeneerObjectiveScroll +local orderedHandlers = T.orderedHandlers +local orderedNames = T.orderedNames + + +--- Placing the Update functions here since they shouldn't be messing with schema stuff +local currentPosition, anchorFrame, anchorPoint +--- Positioning and stuff +local tick = 0 +local initReason = OBJECTIVE_TRACKER_UPDATE_ALL +local requiresInit +function T:Update (reason, ...) + if not B.Conf.VeneerObjectiveWrapper.enabled then + return + end + tick = tick + 1 + local print = tprint + local hasStuff = false + local insertingStuff = false + + if initReason then + reason = initReason + initReason = nil + elseif not reason then + reason = OBJECTIVE_TRACKER_UPDATE_ALL + end + print(format('|cFFBB0066Update:|r |cFFFF%04X%d|r ', tick, lshift(reason, 4)), reason, ...) + currentPosition = 0 + + for id, handler in pairs(T.orderedHandlers) do + local frame = handler.frame + + print('') + if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then + insertingStuff = handler:UpdateTracker(reason, ...) + else + print(' |cFFFF4400Update:|r skipping',handler.name) + end + + if handler.numWatched >= 1 then + hasStuff = true + currentPosition = currentPosition + 1 + Default.AddTracker(handler, frame, currentPosition) + frame.wasEmpty = nil + else + frame.destinationOffset = 0 + if not frame.wasEmpty and not frame.fadeOut:IsPlaying() then + frame.fadeOut:Play() + end + frame.wasEmpty = true + end + end + + -- do these whenever there is content or content is being added + if hasStuff or insertingStuff then + T:FinishWrapper() + end + Quest.GetClosest() + T.UpdateActionButtons(reason) +end + +Default.UpdateTracker = function (handler, reason, id, isNew) + local print = handler.print + local frame = handler.frame + local blockIndex = 0 + print('MODULE:'..handler.name, 'message:', reason, 'id:', id, (isNew and '|cFF88FF88' or '|cFF555555')..'isNew|r') + handler.updateReason = reason + local numWatched, numAll, watchTable = handler:GetNumWatched(id, isNew) + + if numWatched >= 1 then + if watchTable then + print(' WatchList', ' n ID Obj wID Log Blk') + for i, w in ipairs(watchTable) do + 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 ''))) + end + end + end + + handler.numWatched = numWatched + handler.numAll = numAll + handler.numBlocks = 0 + handler.currentBlock = 0 + handler.currentAnchor = frame.titlebg + for blockIndex = 1, numWatched do + local currentBlock = handler:UpdateBlock(blockIndex, id, isNew) + if currentBlock then + handler:AddBlock(currentBlock) + else + print(' |cFF'..handler.internalColor..'finished|r @', blockIndex) + break -- done with quest stuff + end + end + + local numBlocks = handler.numBlocks + local used = handler.usedBlocks + local free = handler.freeBlocks + 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)) + + return numWatched, numAll +end + +Default.UpdateBlock = function (handler, index) + --@debug@ + local print = bprint -- @end-debug@ + if not index then + return + end + local info = handler.WatchList[index] -- should match up with whatever the internal watch list has + if not info then + return + end + --@debug@ + print(' Updating |cFF00FF00'..handler.displayName..'|r|cFF00FFFF'..index..'|r|cFF0099FF', info.id ,'|r')--@end-debug@ + local frame = handler.frame + local block = handler:GetBlock(info.id) + + if block.isAnimating then + -- Nothing to do, leave it as is + return block + end + + block.handler = handler + block.info = info + info.blockIndex = index + --@debug@ + local keyInfo--@end-debug@ + if info.id then + handler.InfoBlock[info.id] = block + --@debug@ + keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'InfoBlock[' .. info.id .. '] = *' .. block:GetName():gsub('%D', '') --@end-debug@ + end + if info.logIndex then + handler.LogBlock[info.logIndex] = block + --@debug@ + keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'LogBlock[' .. info.logIndex .. '] = ' .. block:GetName():gsub('%D', '')--@end-debug@ + end + if info.watchIndex then + handler.WatchBlock[info.watchIndex] = block + --@debug@ + keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'WatchBlock[' .. info.watchIndex .. '] = ' .. block:GetName():gsub('%D', '')--@end-debug@ + end + --@debug@ + if keyInfo then print(' assigned', keyInfo) end--@end-debug@ + handler.BlockInfo[index] = info + block.endPoint = block.titlebg + block.attachmentHeight = 0 + block.currentLine = 0 + local attachments, override_schema = handler:UpdateObjectives(block, block.schema) + + block.title:SetText(info.title) + + if info.specialItem and not info.itemButton then + --@debug@ + print(' - |cFF00FFFFgenerating item button for info set')--@end-debug@ + info.itemButton = T.SetItemButton(block, info) + else + --info.itemButton = nil + end + + local tagPoint, tagAnchor, tagRelative, x, y = 'TOPRIGHT', block, 'TOPRIGHT', -2, -2 + + + if info.selected then + block.SelectionOverlay:Show() + else + block.SelectionOverlay:Hide() + end + + if info.tagInfo then + tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'frequencyTag', tagPoint, tagAnchor, tagRelative) + tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'typeTag', tagPoint, tagAnchor, tagRelative) + tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'completionTag', tagPoint, tagAnchor, tagRelative) + end + + if info.schema then + block.schema = info.schema + end + return block +end + +Default.UpdateObjectives = function(handler, block, block_schema, displayObjectives) + local print = lprint + displayObjectives = displayObjectives or true + block_schema = block_schema or block.schema + local info = block.info + print(' |cFF00FF00default.objectives', block:GetName()) + -- reset the starting positions + local text, attachment, template + local numAttachments = 0 + + if info.objectives and displayObjectives then + for i, data in ipairs(info.objectives) do + text, attachment, template = handler:UpdateLine(block, data) + if text or attachment then + local line = handler:GetLine(block) + line.height = 0 + print(' |cFF88FF00#', i, data.type, text, attachment) + handler:AddLine(block, text, attachment, template) + end + if attachment then + numAttachments = numAttachments + 1 + end + end + end + + if block.currentLine < block.numLines then + print(' - cull', block.currentLine, block.numLines) + for i = block.currentLine + 1, block.numLines do + print(' - hide |cFFFF0088'..i..'|r', block.lines[i]) + block.lines[i]:ClearAllPoints() + block.lines[i]:Hide() + end + end + + if block.currentLine > 0 then + block.attachmentHeight = block.attachmentHeight + print(' |cFF00FF00attachment:', block.attachmentHeight) + end + return numAttachments, block_schema +end + +Default.UpdateLine = function(handler, block, data) + return block.info.description, nil, 'default' +end + +Default.Select = function(handler, block) + T:Update() +end +Default.Open = function(handler, block) + T:Update(handler.updateReasonModule) +end +Default.Remove = function(handler, block) + T:Update(handler.updateReasonModule) +end +Default.Report = function(handler, block) + print('Stats:', handler.numWatched,'items tracked,', handler.numBlocks,'blocks assigned.') +end + +function Default:OnMouseUp (button) + print(self.handler.name, self.mainStyle, self.subStyle) + if button == 'LeftButton' then + if IsModifiedClick("CHATLINK") and ChatEdit_GetActiveWindow() then + self.Link(self.handler, self) + elseif IsModifiedClick("QUESTWATCHTOGGLE") then + self.Remove(self.handler, self) + else + self.Select(self.handler, self) + end + elseif button == 'RightButton' then + self.Open(self.handler, self) + end + self.initialButton = nil + self.modChatLink = nil + self.modQuestWatch = nil + --T:Update(self.handler.updateReasonModule) + print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r') +end +function Default:OnMouseDown (button) + print(self.info.title) +end