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