comparison ObjectiveFrame.lua @ 22:9b3fa734abff

ObjectiveFrame - polish quest rewards display - implement money objectives - set line metrics in UpdateLine - set block metrics in UpdateBlock (sum of line metrics)
author Nenue
date Sat, 09 Apr 2016 07:32:45 -0400
parents d5ee940de273
children
comparison
equal deleted inserted replaced
21:d5ee940de273 22:9b3fa734abff
41 local blockSpacing = 1 41 local blockSpacing = 1
42 local wrapperMaxWidth, wrapperMaxHeight = 270, 490 -- these are the hard bounds, actual *Height variables are changed 42 local wrapperMaxWidth, wrapperMaxHeight = 270, 490 -- these are the hard bounds, actual *Height variables are changed
43 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' 43 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE'
44 local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24 44 local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24
45 local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2 45 local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2
46 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0} 46 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0 }
47 local rewardSize = 32
47 local oprint = B.print('Objectives') 48 local oprint = B.print('Objectives')
48 local bprint = B.print('Block') 49 local bprint = B.print('Block')
49 local tprint = B.print('Tracker') 50 local tprint = B.print('Tracker')
50 local lprint = B.print('Line') 51 local lprint = B.print('Line')
51 52
120 block.statusbg:SetGradientAlpha(unpack(textbg)) 121 block.statusbg:SetGradientAlpha(unpack(textbg))
121 122
122 block.SelectionOverlay:SetPoint('TOPLEFT') 123 block.SelectionOverlay:SetPoint('TOPLEFT')
123 block.SelectionOverlay:SetPoint('BOTTOMRIGHT') 124 block.SelectionOverlay:SetPoint('BOTTOMRIGHT')
124 125
126 block.icon:SetSize(rewardSize, rewardSize)
127 block.icon:SetPoint('TOPRIGHT', block, 'TOPRIGHT', -2, -2)
125 128
126 129
127 --- methods for event handlers 130 --- methods for event handlers
128 131
129 block.Select = handler.Select 132 block.Select = handler.Select
179 displayObjectiveHeader = true 182 displayObjectiveHeader = true
180 end 183 end
181 184
182 local attachmentHeight = 0 185 local attachmentHeight = 0
183 if info.objectives then 186 if info.objectives then
187 attachmentHeight = textSpacing * 2
184 for i, data in ipairs(info.objectives) do 188 for i, data in ipairs(info.objectives) do
185 print(' |cFF88FF00#', i, data.type, data.text) 189 print(' |cFF88FF00#', i, data.type, data.text)
186 displayObjectiveHeader = true 190 displayObjectiveHeader = true
187 local line = block:GetLine(i) 191 local line = block:GetLine(i)
188 line.height = 0 192 line.height = 0
189 block:UpdateLine(line, data) 193 block:UpdateLine(line, data)
190 194
191 line:ClearAllPoints() 195 line:ClearAllPoints()
192 if line.displayText then 196 if line.widget then
197 local widgetPosition = 0
198 line.widget:SetPoint('TOP', line, 'TOP', 0, -widgetPosition)
199 line.widget:Show()
200 line.height = line.widget:GetHeight() + textSpacing
201
202 if line.displayText and #line.displayText >= 1 then
203 widgetPosition = line.status:GetHeight() + textSpacing
204 line.status:SetText(line.displayText)
205 line.height = floor(line.status:GetStringHeight()+.5) + textSpacing + line.widget.height
206 print(' - progressbar has text, adjust')
207 end
208 elseif line.displayText then
193 line.status:SetText(line.displayText) 209 line.status:SetText(line.displayText)
194 line.height = floor(line.status:GetStringHeight()+.5) 210 line.height = floor(line.status:GetStringHeight()+.5) + textSpacing
211
195 end 212 end
196 213 attachmentHeight = attachmentHeight + line.height
197 if line.widget then
198 line.widget:SetPoint('TOP', line, 'TOP', 0, 0)
199 line.widget:Show()
200 end
201
202 214
203 line:Show() 215 line:Show()
204 216
205 line:SetPoint('LEFT', block, 'LEFT', 0, 0) 217 line:SetPoint('LEFT', block, 'LEFT', 0, 0)
206 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, 0) 218 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, 0)
207 line:SetPoint('RIGHT', block, 'RIGHT', 0, 0) 219 line:SetPoint('RIGHT', block, 'RIGHT', 0, 0)
208 line:SetHeight(line.height) 220 line:SetHeight(line.height)
209 221
210 attachmentHeight = attachmentHeight + line.height 222
211 print(' sz', line:GetSize()) 223 print(' sz', line:GetSize())
212 print(' pt', line:GetPoint(1)) 224 print(' pt', line:GetPoint(1))
213 print(' |cFF44BBFF#', i, 'anchoring line, size:', line.height, 'current endpoint:', line.statusbg) 225 print(' |cFF44BBFF#', i, 'anchoring line, size:', line.height, 'current endpoint:', line.statusbg)
214 226
215 block.endPoint = line 227 block.endPoint = line
216 end 228 end
217 229
218 if attachmentHeight > 0 then 230 if attachmentHeight > 0 then
219 block.attachmentHeight = attachmentHeight + textSpacing * 2 231 block.attachmentHeight = attachmentHeight
220 print(' |cFF00FF00attachment:', block.attachmentHeight) 232 print(' |cFF00FF00attachment:', block.attachmentHeight)
221 end 233 end
222 234
223 local lines = handler.lines[block.blockIndex] 235 local lines = handler.lines[block.blockIndex]
224 local numObjectives = info.numObjectives 236 local numObjectives = #info.objectives
225 local numLines = #lines 237 local numLines = #lines
226 if numLines > numObjectives then 238 if lines and numLines > numObjectives then
227 print(' has extra lines, need to clean up;', numLines, numObjectives) 239 print(' has extra lines, need to clean up;', numLines, numObjectives)
228 for i = numObjectives+1, numLines do 240 for i = numObjectives+1, numLines do
229 print(' hide', i, lines[i]:GetName()) 241 print(' hide', i, lines[i]:GetName())
230 lines[i]:Hide() 242 lines[i]:Hide()
231 end 243 end
268 end 280 end
269 281
270 Quest.UpdateObjectives = function(handler, block) 282 Quest.UpdateObjectives = function(handler, block)
271 local print = lprint 283 local print = lprint
272 print('|cFF00FFFFUpdateObjectives()') 284 print('|cFF00FFFFUpdateObjectives()')
273 Default.UpdateObjectives(handler, block)
274 local info = block.info 285 local info = block.info
275 local completionText 286 local completionText
276 if info.isAutoComplete then 287 if info.isAutoComplete then
277 local questID, popupType = GetAutoQuestPopUp(info.questLogIndex) 288 local questID, popupType = GetAutoQuestPopUp(info.questLogIndex)
278 if popupType == 'COMPLETE' then 289 if popupType == 'COMPLETE' then
279 completionText = CLICK_TO_COMPLETE 290 completionText = CLICK_TO_COMPLETE
280 end 291 end
281 end 292 end
282 if not completionText then 293 if info.isComplete then
283 completionText = GetQuestLogCompletionText(info.questLogIndex) 294 if not completionText then
284 end 295 completionText = GetQuestLogCompletionText(info.questLogIndex)
285 296 end
286 block.status:SetText() 297 else
298 Default.UpdateObjectives(handler, block)
299 end
287 end 300 end
288 301
289 --- Module-specific display variables 302 --- Module-specific display variables
290 -- * height - height of whatever display widget is involved in conveying the task 303 -- * height - height of whatever display widget is involved in conveying the task
291 -- * money - boolean that determines listening for money events or not 304 -- * money - boolean that determines listening for money events or not
311 end 324 end
312 325
313 line.displayColor = {r, g, b, a} 326 line.displayColor = {r, g, b, a}
314 line.status:SetTextColor(r, g, b, a) 327 line.status:SetTextColor(r, g, b, a)
315 line.displayText = data.text 328 line.displayText = data.text
329
316 return line 330 return line
317 end 331 end
318 332
319 Bonus.UpdateLine = function(handler, block, line, data) 333 Bonus.UpdateLine = function(handler, block, line, data)
320 local info = block.info 334 local info = block.info
321 local print = lprint 335 local print = lprint
322 336
323 337
324 line.displayColor = 'FFFFFF' 338 line.displayColor = 'FFFFFF'
325 if data.text and not info.title then 339 line.displayText = data.text
326 print('using first text item as title')
327 info.title = data.text
328 else
329 line.displayText = data.text
330 end
331
332 line.progress = 0 340 line.progress = 0
333 print(' ', data.objectiveIndex,'|cFFFF0088-|r', data.objectiveType, data.text) 341 print(' ', data.objectiveIndex,'|cFFFF0088-|r', data.objectiveType, data.text)
334 if data.objectiveType == 'progressbar' then 342 if data.objectiveType == 'progressbar' then
335 line.widgetType = 'ProgressBar' 343 line.widgetType = 'ProgressBar'
336 print(' |cFFFF44DDpercent='..tostring(GetQuestProgressBarPercent(info.questID))) 344 print(' |cFFFF44DDpercent='..tostring(GetQuestProgressBarPercent(info.questID)))
342 line.progress = 2 350 line.progress = 2
343 end 351 end
344 line.format = PERCENTAGE_STRING 352 line.format = PERCENTAGE_STRING
345 local widget = mod.SetWidget(line, data, 'ProgressBar', info.questID..'-'..data.objectiveIndex) 353 local widget = mod.SetWidget(line, data, 'ProgressBar', info.questID..'-'..data.objectiveIndex)
346 print(' |cFFFF0022** text:|r', data.text, '|cFFFF0022value:|r', data.value, '|cFFFF0022max:|r', data.maxValue) 354 print(' |cFFFF0022** text:|r', data.text, '|cFFFF0022value:|r', data.value, '|cFFFF0022max:|r', data.maxValue)
347 widget:SetPoint('CENTER', line, 'CENTER', 0, 0) 355 widget:SetPoint('TOP', line, 'TOP', 0, 0)
348 356
349 line.widget = widget 357 line.widget = widget
350 line.height = widget.height 358 line.height = widget.height
351 else 359 else
352 line.displayText = data.text 360 line.displayText = data.text
478 486
479 487
480 Default.Update = function (self, reason, ...) 488 Default.Update = function (self, reason, ...)
481 local print = tprint 489 local print = tprint
482 local tracker = self.frame 490 local tracker = self.frame
483 print('|cFFFF4400'..tracker:GetName().. '|r:Update()', reason, ...)
484 local blockIndex = 0 491 local blockIndex = 0
485 local trackerHeight = floor(tracker.titlebg:GetHeight()+.5) 492 local trackerHeight = floor(tracker.titlebg:GetHeight()+.5)
486 493
487 self.currentAnchor = tracker.titlebg 494 self.currentAnchor = tracker.titlebg
488 local numWatched = self:GetNumWatched() 495 local numWatched = self:GetNumWatched()
492 blockIndex = blockIndex + 1 499 blockIndex = blockIndex + 1
493 if watchIndex <= numWatched then 500 if watchIndex <= numWatched then
494 local info = self:GetInfo(watchIndex) 501 local info = self:GetInfo(watchIndex)
495 if info then 502 if info then
496 local currentBlock = self:UpdateBlock(blockIndex, info) 503 local currentBlock = self:UpdateBlock(blockIndex, info)
497 currentBlock:SetPoint('TOPLEFT', self.currentAnchor, 'BOTTOMLEFT', 0, -1) 504 currentBlock:SetPoint('TOPLEFT', self.currentAnchor, 'BOTTOMLEFT', 0, 0)
498 currentBlock:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) 505 currentBlock:SetPoint('RIGHT', tracker,'RIGHT', 0, 0)
499 self.currentAnchor = currentBlock 506 self.currentAnchor = currentBlock
500 print(' |cFFFFFF00'..watchIndex..'|r', '|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height) 507 print(' |cFFFFFF00'..watchIndex..'|r', '|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height, trackerHeight)
501 trackerHeight = trackerHeight + currentBlock.height 508 trackerHeight = trackerHeight + currentBlock.height
502 numBlocks = max(numBlocks, watchIndex) 509 numBlocks = max(numBlocks, watchIndex)
503 actualBlocks = actualBlocks + 1 510 actualBlocks = actualBlocks + 1
504 else 511 else
505 print(' |cFFFF0000bad GetInfo data for #'..watchIndex) 512 print(' |cFFFF0000bad GetInfo data for #'..watchIndex)
526 533
527 tracker.previousHeight = tracker.height 534 tracker.previousHeight = tracker.height
528 if numBlocks >= 1 then 535 if numBlocks >= 1 then
529 previousBlock = nil 536 previousBlock = nil
530 537
531 tracker.height = trackerHeight + tracker.titlebg:GetHeight() 538 tracker.height = trackerHeight
532 tracker:SetHeight(tracker.height) 539 tracker:SetHeight(tracker.height)
533 tracker:Show() 540 tracker:Show()
534 541
535 542
536 else 543 else
611 if info.rewardInfo then 618 if info.rewardInfo then
612 print('has immediate reward') 619 print('has immediate reward')
613 if info.rewardInfo[1].type == 'currency' or info.rewardInfo[1].type == 'item' then 620 if info.rewardInfo[1].type == 'currency' or info.rewardInfo[1].type == 'item' then
614 block.icon:Show() 621 block.icon:Show()
615 block.iconLabel:SetText(info.rewardInfo[1].count) 622 block.iconLabel:SetText(info.rewardInfo[1].count)
616 block.icon:SetSize(block.height, block.height) 623 block.icon:SetPoint(tagPoint, tagAnchor, tagRelative, -2, -2)
617 block.icon:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0)
618 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block.icon, 'TOPLEFT' 624 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block.icon, 'TOPLEFT'
619 block.icon:SetTexture(info.rewardInfo[1].texture) 625 block.icon:SetTexture(info.rewardInfo[1].texture)
620 end 626 end
621 else 627 else
622 block.icon:Hide() 628 block.icon:Hide()
657 663
658 local wrapperHeight = 0 664 local wrapperHeight = 0
659 for id, handler in pairs(mod.orderedHandlers) do 665 for id, handler in pairs(mod.orderedHandlers) do
660 local frame = handler.frame 666 local frame = handler.frame
661 667
662 print(format(' |cFF00FFFFbitcheck (%04X vs %04x+%04x):|r', reason, handler.updateReasonModule, handler.updateReasonEvents), band(reason, handler.updateReasonModule + handler.updateReasonEvents)) 668 print(format('|cFF00FFFF%s and(%04X vs %04x+%04x) = %04X|r', handler.name, reason, handler.updateReasonModule, handler.updateReasonEvents, band(reason, handler.updateReasonModule + handler.updateReasonEvents)))
663 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then 669 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then
664 handler:Update(reason, ...) 670 handler:Update(reason, ...)
665 print(' |cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched) 671 print(' |cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched)
666 insertingStuff = true 672 insertingStuff = true
667 else 673 else
735 block:SetScript('OnUpdate', function() 741 block:SetScript('OnUpdate', function()
736 if block:GetBottom() and not InCombatLockdown() then 742 if block:GetBottom() and not InCombatLockdown() then
737 print(' '..block:GetName()..' |cFF00FF00probe hit!') 743 print(' '..block:GetName()..' |cFF00FF00probe hit!')
738 mod.UpdateBlockAction(block, itemButton, itemButton.previousItem) -- needs to be previousItem from this scope 744 mod.UpdateBlockAction(block, itemButton, itemButton.previousItem) -- needs to be previousItem from this scope
739 block:SetScript('OnUpdate', nil) 745 block:SetScript('OnUpdate', nil)
746
740 end 747 end
741 end) 748 end)
742 previousItem = itemButton 749 previousItem = itemButton
743 else 750 else
744 print('hidden block or unwatched quest') 751 print('hidden block or unwatched quest')