Mercurial > wow > buffalo2
view ObjectiveTracker/Default.lua @ 55:dd9b5f59632c v1.0a-release
Core
- updated comment notes
Objectives
- force hide blocks when their tracker is hidden
Clock
- convert clock into its own module
- display zone coordinates alongside time
author | Nenue |
---|---|
date | Fri, 10 Jun 2016 20:52:27 -0400 |
parents | dd1ae565f559 |
children | f253baf6022d |
line wrap: on
line source
--- ${PACKAGE_NAME} -- @file-author@ -- @project-revision@ @project-hash@ -- @file-revision@ @file-hash@ -- Created: 4/17/2016 7:33 AM --- These are the first layer of methods invoked by event handlers 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 %d |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 local frame = handler.frame local block = handler:GetBlock(info.id) --@debug@ handler.print('UpdateBlock', '|cFF00FFFF'..index..'|r|cFF0099FF', info.id ,'|r', (block.isAnimating and 'animating' or 'static'))--@end-debug@ 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) end if info.selected then block.SelectionOverlay:Show() else block.SelectionOverlay:Hide() end if info.tagInfo then handler:AddTags(block, info.tagInfo, info.tagCoords) end if override_schema then block.schema = override_schema elseif 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, button, IsModifiedClick('CHATLINK'), IsModifiedClick("QUESTWATCHTOGGLE")) 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