annotate Veneer_Objectives/ObjectiveTracker.lua @ 79:0784b87f9722

- adjust top anchors for OrderHallCommandBar
author Nenue
date Sun, 11 Sep 2016 18:46:30 -0400
parents 51f248dc0276
children
rev   line source
Nenue@77 1 -- Veneer
Nenue@79 2 -- Veneer_WorldQuests.lua
Nenue@77 3 -- Created: 8/16/2016 8:19 AM
Nenue@77 4 -- %file-revision%
Nenue@77 5 -- This is more or less a copy of the blizzard code with some customization stuff added
Nenue@77 6
Nenue@77 7 local plugin = VeneerObjectives
Nenue@77 8 local vn, print = LibStub("LibKraken").register(Veneer, VeneerObjectives)
Nenue@77 9 local ot
Nenue@77 10 local otvn
Nenue@77 11
Nenue@77 12 local band, floor, min = bit.band, math.floor, math.min
Nenue@77 13
Nenue@77 14
Nenue@77 15 local X_QUEST = 0x00001;
Nenue@77 16 local X_QUEST_ADDED = 0x00002;
Nenue@77 17 local X_TASK_ADDED = 0x00004;
Nenue@77 18 local X_WORLD_QUEST_ADDED = 0x00008;
Nenue@77 19 local X_SCENARIO = 0x00010;
Nenue@77 20 local X_SCENARIO_NEW_STAGE = 0x00020;
Nenue@77 21 local X_ACHIEVEMENT = 0x00040;
Nenue@77 22 local X_ACHIEVEMENT_ADDED = 0x00080;
Nenue@77 23 local X_SCENARIO_BONUS_DELAYED = 0x00100;
Nenue@77 24 local X_SUPER_TRACK_CHANGED = 0x00200;
Nenue@77 25 -- these are for the specific module ONLY!
Nenue@77 26 local X_MODULE_QUEST = 0x00400;
Nenue@77 27 local X_MODULE_AUTO_QUEST_POPUP = 0x00800;
Nenue@77 28 local X_MODULE_BONUS_OBJECTIVE = 0x01000;
Nenue@77 29 local X_MODULE_WORLD_QUEST = 0x02000;
Nenue@77 30 local X_MODULE_SCENARIO = 0x04000;
Nenue@77 31 local X_MODULE_ACHIEVEMENT = 0x08000;
Nenue@77 32 local X_SCENARIO_SPELLS = 0x10000;
Nenue@77 33 -- special updates
Nenue@77 34 local X_STATIC = 0x0000;
Nenue@77 35 local X_ALL = 0xFFFF;
Nenue@77 36
Nenue@77 37 -- state information
Nenue@77 38 local X_REASON = X_ALL; -- default
Nenue@77 39 local X_MONEY = 0
Nenue@77 40 local X_ANIMATION = 0
Nenue@77 41 local X_ID = 0;
Nenue@77 42
Nenue@77 43 local INSET_V = -20
Nenue@77 44
Nenue@77 45
Nenue@77 46
Nenue@77 47 local trackerWidth = 240
Nenue@77 48 local blockIndent = 12
Nenue@77 49 local blockSpacing = 3
Nenue@77 50
Nenue@77 51 local tracker = {
Nenue@77 52 freeBlocks = {},
Nenue@77 53 usedBlocks = {},
Nenue@77 54 freeProgressBars = {},
Nenue@77 55 usedProgressBars = {},
Nenue@77 56 freeTimers = {},
Nenue@77 57 usedTimers = {},
Nenue@77 58 freeLines = {},
Nenue@77 59
Nenue@77 60 headerText = 'Default Header',
Nenue@77 61 contentHeight = 0,
Nenue@77 62 animationHeight = 0,
Nenue@77 63 updateReasonModule = 0,
Nenue@77 64 updateReasonEvents = 0,
Nenue@77 65 }
Nenue@77 66 local GetTrackerHandler = function(handler)
Nenue@77 67 handler = handler or {}
Nenue@77 68 setmetatable(handler, {__index=tracker})
Nenue@77 69 return handler
Nenue@77 70 end
Nenue@77 71
Nenue@77 72 local Header_OnAnimationStart = function (self, forced)
Nenue@77 73 local header = self:GetParent()
Nenue@77 74 header.animating = true
Nenue@77 75 plugin:UpdateAnimation(header)
Nenue@77 76 end
Nenue@77 77
Nenue@77 78 local Header_OnAnimationFinished = function (self, forced)
Nenue@77 79 local header = self:GetParent()
Nenue@77 80 header.animating = nil
Nenue@77 81 plugin:Update(X_ANIMATION)
Nenue@77 82 end
Nenue@77 83
Nenue@77 84 -- reset generic flags for layout compilation
Nenue@77 85 function tracker:InitLayout (isStatic)
Nenue@77 86 print('|cFF00FFFFlayout|r', self.headerText)
Nenue@77 87 self.firstBlock = nil
Nenue@77 88 self.lastBlock = nil
Nenue@77 89 self.currentBlock = nil
Nenue@77 90 self.oldContentHeight = self.contentHeight
Nenue@77 91 self.oldAnimationHeight = self.animationHeight
Nenue@77 92 self.numBlocks = 0
Nenue@77 93 for id, block in pairs(self.usedBlocks) do
Nenue@77 94 block.used = nil
Nenue@77 95 end
Nenue@77 96 if not isStatic then
Nenue@77 97 self.hasSkippedBlocks = false
Nenue@77 98 end
Nenue@77 99
Nenue@77 100 if not self.header then
Nenue@77 101 self:SetHeader(self.headerText, X_REASON)
Nenue@77 102 self.header:SetPoint('TOPLEFT', plugin, 'TOPLEFT', 0, -plugin.contentHeight)
Nenue@77 103 plugin.contentHeight = plugin.contentHeight + self.header:GetHeight()
Nenue@77 104 end
Nenue@77 105
Nenue@77 106
Nenue@77 107 self.contentHeight = 0
Nenue@77 108
Nenue@77 109 end
Nenue@77 110
Nenue@77 111 -- clear out generic flags and set aside block frames for re-use
Nenue@77 112 tracker.EndLayout = function(self)
Nenue@77 113 self.lastBlock = self.currentBlock
Nenue@77 114 for id, block in pairs(self.usedBlocks) do
Nenue@77 115 if not block.used then
Nenue@77 116 self:FreeBlock(block)
Nenue@77 117 end
Nenue@77 118 end
Nenue@77 119 end
Nenue@77 120
Nenue@77 121 function tracker:SetHeader (text, animateReason)
Nenue@77 122 if self.header then
Nenue@77 123 return self.header
Nenue@77 124 end
Nenue@77 125
Nenue@77 126 local block = CreateFrame('Button', nil, plugin, 'VeneerObjectiveHeader')
Nenue@77 127 block.handler = self
Nenue@77 128 block.text:SetText(self.headerText)
Nenue@77 129
Nenue@77 130 self.currentBlock = block
Nenue@77 131 self.header = block
Nenue@77 132 return block
Nenue@77 133 end
Nenue@77 134
Nenue@77 135 function tracker:FreeBlock(block)
Nenue@77 136 self.usedBlocks[block.id] = nil
Nenue@77 137 print('|cFF0088FFfree|r', block:GetName())
Nenue@77 138 tinsert(self.freeBlocks, block)
Nenue@77 139
Nenue@77 140 block.numLines = 0
Nenue@77 141 block:SetHeight(0)
Nenue@77 142 block:Hide()
Nenue@77 143 end
Nenue@77 144
Nenue@77 145 -- should only be used in an N-lastN loop
Nenue@77 146 function tracker:FreeLine(line)
Nenue@77 147 if line.block then
Nenue@77 148 line.block.lines[line.index] = nil
Nenue@77 149 end
Nenue@77 150 print('|cFF0088FFfree|r', line:GetName())
Nenue@77 151 local freeLines = line.type or self.freeLines
Nenue@77 152 tinsert(freeLines, line)
Nenue@77 153 end
Nenue@77 154
Nenue@77 155 local blocksn = 0
Nenue@77 156 tracker.GetBlock = function(self, id)
Nenue@77 157 local block = self.usedBlocks[id]
Nenue@77 158 if not block then
Nenue@77 159 local numFree = #self.freeBlocks
Nenue@77 160 if numFree >= 1 then
Nenue@77 161 block = tremove(self.freeBlocks, numFree)
Nenue@77 162 else
Nenue@77 163 blocksn = blocksn + 1
Nenue@77 164 block = CreateFrame('Button', 'OTVNBlock'..blocksn, plugin, 'VeneerObjectiveBlock')
Nenue@77 165 block.lines = {}
Nenue@77 166 end
Nenue@77 167 self.usedBlocks[id] = block
Nenue@77 168 block.id = id
Nenue@77 169 block.handler = self
Nenue@77 170 end
Nenue@77 171
Nenue@77 172 block.used = true
Nenue@77 173 block.currentLine = nil
Nenue@77 174 block.numLines = 0
Nenue@77 175
Nenue@77 176 if block.lines then
Nenue@77 177 for i, line in ipairs(block.lines) do
Nenue@77 178 line.used = nil
Nenue@77 179 end
Nenue@77 180 end
Nenue@77 181
Nenue@77 182 block.contentHeight = blockSpacing
Nenue@77 183 block:SetWidth(trackerWidth)
Nenue@77 184 block:SetHeight(0)
Nenue@77 185
Nenue@77 186 return block
Nenue@77 187 end
Nenue@77 188
Nenue@77 189 -- obtain line
Nenue@77 190 local linesn = 0
Nenue@77 191 function tracker:GetLine(block, index, lineType)
Nenue@77 192 local line = block.lines[index]
Nenue@77 193 if line and line.lineType ~= lineType then
Nenue@77 194
Nenue@77 195 tinsert(self.freeLines, line)
Nenue@77 196 line = nil
Nenue@77 197 end
Nenue@77 198
Nenue@77 199 if not line then
Nenue@77 200 local freeLines = (lineType and lineType.freeLines) or self.freeLines
Nenue@77 201 local numFreeLines = #freeLines
Nenue@77 202 if numFreeLines >= 1 then
Nenue@77 203 line = tremove(freeLines, numFreeLines)
Nenue@77 204 else
Nenue@77 205 linesn = linesn + 1
Nenue@77 206 line = CreateFrame('Frame', 'OTVNLine'.. linesn, block, (lineType and lineType.template) or 'VeneerObjectiveLine')
Nenue@77 207 end
Nenue@77 208 line:SetParent(block)
Nenue@77 209 end
Nenue@77 210
Nenue@77 211 line.type = lineType
Nenue@77 212 line.index = index
Nenue@77 213 line.used = true
Nenue@77 214 line.block = block
Nenue@77 215 line.text:SetPoint('TOPLEFT', line, 'TOPLEFT', blockIndent, 0)
Nenue@77 216 line:SetHeight(0) -- in order for GetStringHeight to be useful
Nenue@77 217
Nenue@77 218 block.lines[index] = line
Nenue@77 219
Nenue@77 220 return line
Nenue@77 221 end
Nenue@77 222
Nenue@77 223 function tracker:AddProgressBar(block, line, questID)
Nenue@77 224 end
Nenue@77 225
Nenue@77 226 function tracker:FreeProgressBar(block, line)
Nenue@77 227 end
Nenue@77 228
Nenue@77 229 function tracker:AddTimerBar(block, line, duration, startTime)
Nenue@77 230 end
Nenue@77 231
Nenue@77 232 function tracker:FreeTimerBar(block, line)
Nenue@77 233 end
Nenue@77 234
Nenue@77 235 -- Checks for space and anchors or frees the block accordingly
Nenue@77 236 function tracker:AddBlock (block, force)
Nenue@77 237 local anchor = self.currentBlock or self.header
Nenue@77 238 self.numBlocks = self.numBlocks + 1
Nenue@77 239
Nenue@77 240 if block.header then
Nenue@77 241 print('header!', floor(block.contentHeight), '+', floor(block.header:GetStringHeight()))
Nenue@77 242 block.contentHeight = block.contentHeight + block.header:GetStringHeight()
Nenue@77 243 self.used = true
Nenue@77 244 end
Nenue@77 245
Nenue@77 246
Nenue@77 247 if self.currentBlock then
Nenue@77 248 self.currentBlock.nextBlock = block
Nenue@77 249 block.prevBlock = self.currentBlock
Nenue@77 250 else
Nenue@77 251 self.firstBlock = block
Nenue@77 252 end
Nenue@77 253
Nenue@77 254 self.contentHeight = self.contentHeight + block.contentHeight
Nenue@77 255 self.currentBlock = block
Nenue@77 256
Nenue@77 257 if not plugin.currentBlock then
Nenue@77 258 plugin.firstBlock = block
Nenue@77 259 end
Nenue@77 260 plugin.currentBlock = block
Nenue@77 261
Nenue@77 262
Nenue@77 263
Nenue@77 264 block:SetHeight(block.contentHeight)
Nenue@77 265 print('block|cFF88FF00', self.numBlocks, block, '|rto', anchor, 'size', block.contentHeight)
Nenue@77 266 block:ClearAllPoints()
Nenue@77 267 block:SetPoint('TOPLEFT', anchor, 'BOTTOMLEFT', 0, -blockSpacing)
Nenue@77 268 block:Show()
Nenue@77 269
Nenue@77 270 -- free unused lines
Nenue@77 271 local numLines = #block.lines
Nenue@77 272 for i = 1, numLines do
Nenue@77 273 local line = block.lines[i]
Nenue@77 274 if not line.used or block.collapsed then
Nenue@77 275 print('|cFFFF4400!|r')
Nenue@77 276 self:FreeLine(line)
Nenue@77 277 else
Nenue@77 278 if not line:IsShown() then
Nenue@77 279 line:Show()
Nenue@77 280 end
Nenue@77 281 end
Nenue@77 282 end
Nenue@77 283
Nenue@77 284 return true
Nenue@77 285 end
Nenue@77 286
Nenue@77 287 function tracker:SetLine(block, index, lineType, textOrFunc)
Nenue@77 288 local anchor = block.currentLine or block.header
Nenue@77 289 local line = self:GetLine(block, index, lineType)
Nenue@77 290
Nenue@77 291 if line.ticker then
Nenue@77 292 line.ticker:Cancel()
Nenue@77 293 line.ticker = nil
Nenue@77 294 end
Nenue@77 295
Nenue@77 296 local text = textOrFunc
Nenue@77 297 if type(textOrFunc) == 'function' then
Nenue@77 298 text = textOrFunc()
Nenue@77 299
Nenue@77 300 line.ticker = C_Timer.NewTicker(10, function()
Nenue@77 301 line.height = tracker:SetLineText(line.text, textOrTextFunc())
Nenue@77 302 line:SetHeight(line.height)
Nenue@77 303 end)
Nenue@77 304 end
Nenue@77 305 line.height = tracker:SetLineText(line.text, text)
Nenue@77 306 line:SetHeight(line.height)
Nenue@77 307
Nenue@77 308 print('line|cFFFFFF00', line:GetName(), '|rto', anchor:GetName(), 'size', line.height)
Nenue@77 309 line:SetPoint('TOPLEFT', anchor, 'BOTTOMLEFT', 0, 0)
Nenue@77 310
Nenue@77 311 block.contentHeight = block.contentHeight + line.height
Nenue@77 312 block.numLines = block.numLines + 1
Nenue@77 313
Nenue@77 314 if block.currentLine then
Nenue@77 315 line.prevLine = block.currentLine
Nenue@77 316 block.currentLine.nextLine = line
Nenue@77 317 else
Nenue@77 318 block.firstLine = line
Nenue@77 319 end
Nenue@77 320
Nenue@77 321 block.currentLine = line
Nenue@77 322 plugin.currentLine = line
Nenue@77 323
Nenue@77 324 end
Nenue@77 325
Nenue@77 326 function tracker:SetLineText(fontString, text)
Nenue@77 327 fontString:SetText(text)
Nenue@77 328 return fontString:GetStringHeight()
Nenue@77 329 end
Nenue@77 330
Nenue@77 331 -- Update lite
Nenue@77 332 function tracker:ResetAnchors ()
Nenue@77 333 self:InitLayout()
Nenue@77 334
Nenue@77 335 self:EndLayout()
Nenue@77 336 end
Nenue@77 337
Nenue@77 338
Nenue@77 339 local UpdateQuestTracker = function(watchIndex, logIndex)
Nenue@77 340 return true
Nenue@77 341 end
Nenue@77 342
Nenue@77 343 -- top-down updaters
Nenue@77 344
Nenue@77 345 local questTracker = GetTrackerHandler({
Nenue@77 346 headerText = 'Quests',
Nenue@77 347 updateReasonModule = X_MODULE_QUEST,
Nenue@77 348 updateReasonEvents = (X_QUEST + X_QUEST_ADDED),
Nenue@77 349 })
Nenue@77 350 function questTracker:Update ()
Nenue@77 351 self:InitLayout()
Nenue@77 352 for watchIndex = 1, GetNumQuestWatches() do
Nenue@77 353 local questID, title, questLogIndex, numObjectives, requiredMoney, isComplete, startEvent, isAutoComplete, failureTime, timeElapsed, questType, isTask, isBounty, isStory, isOnMap, hasLocalPOI = GetQuestWatchInfo(watchIndex)
Nenue@77 354 if not questID then
Nenue@77 355 -- stop parsing; end of data or variables haven't completely loaded
Nenue@77 356 break
Nenue@77 357 end
Nenue@77 358 local showQuest = true
Nenue@77 359 if isTask or (isBounty and not IsQuestComplete(questID)) then
Nenue@77 360 -- do nothing
Nenue@77 361 else
Nenue@77 362 -- obtain a block
Nenue@77 363 local block = self:GetBlock(questID)
Nenue@77 364
Nenue@77 365 block.header:SetText(title)
Nenue@77 366
Nenue@77 367 for i = 1, numObjectives do
Nenue@77 368 local text, objectiveType, finished = GetQuestLogLeaderBoard(i, questLogIndex)
Nenue@77 369 if text then
Nenue@77 370 self:SetLine(block, i, nil, text)
Nenue@77 371 end
Nenue@77 372 end
Nenue@77 373
Nenue@77 374 block:SetScript('OnClick', self.OnClick)
Nenue@77 375 block:RegisterForClicks('AnyDown')
Nenue@77 376
Nenue@77 377 self:AddBlock(block)
Nenue@77 378 end
Nenue@77 379 end
Nenue@77 380
Nenue@77 381 self:EndLayout()
Nenue@77 382 end
Nenue@77 383 questTracker.OnClick = function(block, button)
Nenue@77 384 if button == 'RightButton' then
Nenue@77 385 ObjectiveTracker_ToggleDropDown(block, QuestObjectiveTracker_OnOpenDropDown)
Nenue@77 386 else
Nenue@77 387 CloseDropDownMenus()
Nenue@77 388
Nenue@77 389 local questLogIndex = GetQuestLogIndexByID(block.id)
Nenue@77 390 if ( IsModifiedClick("QUESTWATCHTOGGLE") ) then
Nenue@77 391 QuestObjectiveTracker_UntrackQuest(nil, block.id);
Nenue@77 392 else
Nenue@77 393 if ( IsQuestComplete(block.id) and GetQuestLogIsAutoComplete(questLogIndex) ) then
Nenue@77 394 AutoQuestPopupTracker_RemovePopUp(block.id);
Nenue@77 395 ShowQuestComplete(questLogIndex);
Nenue@77 396 else
Nenue@77 397 QuestLogPopupDetailFrame_Show(questLogIndex);
Nenue@77 398 end
Nenue@77 399 end
Nenue@77 400 end
Nenue@77 401 end
Nenue@77 402
Nenue@77 403 local UpdateAchievementTracker = function() end
Nenue@77 404 local UpdateTaskTracker = function() end
Nenue@77 405 local UpdateScenarioTracker = function() end
Nenue@77 406
Nenue@77 407 function plugin:Update(reason, id)
Nenue@77 408
Nenue@77 409 print('update', reason, #plugin.trackers)
Nenue@77 410
Nenue@77 411 if plugin.minimized then
Nenue@77 412 for i, tracker in ipairs(plugin.trackers) do
Nenue@77 413 tracker:Hide()
Nenue@77 414 end
Nenue@77 415 return
Nenue@77 416 end
Nenue@77 417
Nenue@77 418
Nenue@77 419 local X_REASON = reason or X_ALL
Nenue@77 420 local X_ID = id
Nenue@77 421
Nenue@77 422 plugin.maxHeight = plugin:GetHeight()
Nenue@77 423 plugin.oldContentsHeight = plugin.contentHeight
Nenue@77 424 plugin.contentHeight = 0
Nenue@77 425 plugin.currentBlock = nil
Nenue@77 426 plugin.firstBlock = nil
Nenue@77 427 plugin:SetWidth(trackerWidth)
Nenue@77 428
Nenue@77 429 -- pad for header
Nenue@77 430 plugin.contentHeight = plugin.header:GetHeight()
Nenue@77 431
Nenue@77 432 for i, header in ipairs(plugin.trackers) do
Nenue@77 433 header.used = nil
Nenue@77 434 end
Nenue@77 435
Nenue@77 436
Nenue@77 437 local addedSpace = false
Nenue@77 438 for i, tracker in ipairs(plugin.trackers) do
Nenue@77 439 if ( band(X_REASON, tracker.updateReasonModule + tracker.updateReasonEvents ) > 0 ) then
Nenue@77 440 print('->', tracker.headerText)
Nenue@77 441 tracker:Update()
Nenue@77 442 if tracker.oldContentHeight - tracker.contentHeight >= 1 then
Nenue@77 443 addedSpace = true
Nenue@77 444 end
Nenue@77 445 else
Nenue@77 446 -- if we can fit another header or an animation handler popped, contents need to be generated
Nenue@77 447 if addedSpace or (tracker.header and tracker.header.animating) then
Nenue@77 448 print('->', tracker.headerText, 'added space')
Nenue@77 449 tracker:Update()
Nenue@77 450 else
Nenue@77 451 print('->', tracker.headerText, 'lite update')
Nenue@77 452 -- otherwise, measure contents and hide anything that won't fit
Nenue@77 453 tracker:ResetAnchors()
Nenue@77 454 end
Nenue@77 455 end
Nenue@77 456 end
Nenue@77 457
Nenue@77 458 for i, tracker in ipairs(plugin.trackers) do
Nenue@77 459 if tracker.currentBlock then
Nenue@77 460 if not tracker.header:IsShown() then
Nenue@77 461 tracker.header:Show()
Nenue@77 462 end
Nenue@77 463 else
Nenue@77 464 if tracker.header:IsShown() then
Nenue@77 465 tracker.header:Hide()
Nenue@77 466 end
Nenue@77 467 end
Nenue@77 468 end
Nenue@77 469
Nenue@77 470 if VeneerBuffFrame and VeneerBuffFrame.lastBuff then
Nenue@77 471 plugin:ClearAllPoints()
Nenue@77 472 plugin:SetPoint('TOP', VeneerBuffFrame.lastBuff, 'BOTTOM', 0, -4)
Nenue@77 473 plugin:SetPoint('RIGHT', UIParent, 'RIGHT', -6, 0)
Nenue@77 474 else
Nenue@77 475 plugin:ClearAllPoints()
Nenue@77 476 plugin:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -6, -120)
Nenue@77 477 end
Nenue@77 478
Nenue@77 479 plugin:Show()
Nenue@77 480 end
Nenue@77 481
Nenue@77 482 plugin.init = function()
Nenue@77 483
Nenue@77 484 plugin:RegisterEvent("QUEST_LOG_UPDATE")
Nenue@77 485 plugin:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED")
Nenue@77 486 plugin:RegisterEvent("QUEST_WATCH_LIST_CHANGED")
Nenue@77 487 plugin:RegisterEvent("QUEST_AUTOCOMPLETE")
Nenue@77 488 plugin:RegisterEvent("QUEST_ACCEPTED")
Nenue@77 489 plugin:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED")
Nenue@77 490 plugin:RegisterEvent("SCENARIO_UPDATE")
Nenue@77 491 plugin:RegisterEvent("SCENARIO_CRITERIA_UPDATE")
Nenue@77 492 plugin:RegisterEvent("SCENARIO_SPELL_UPDATE")
Nenue@77 493 plugin:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE")
Nenue@77 494 plugin:RegisterEvent("ZONE_CHANGED_NEW_AREA");
Nenue@77 495 plugin:RegisterEvent("ZONE_CHANGED");
Nenue@77 496 plugin:RegisterEvent("QUEST_POI_UPDATE");
Nenue@77 497 plugin:RegisterEvent("VARIABLES_LOADED");
Nenue@77 498 plugin:RegisterEvent("QUEST_TURNED_IN");
Nenue@77 499 plugin:RegisterEvent("PLAYER_MONEY");
Nenue@77 500
Nenue@77 501 plugin.trackers = {
Nenue@77 502 questTracker,
Nenue@77 503 }
Nenue@77 504 print('bub')
Nenue@77 505 end
Nenue@77 506 function plugin:event(event, ...)
Nenue@77 507 print('|cFFFF0088' .. event, ...)
Nenue@77 508 if event == 'QUEST_WATCH_LIST_CHANGED' then
Nenue@77 509 local questID, added = ...
Nenue@77 510 if added then
Nenue@77 511 if not IsQuestBounty(questID) or IsQuestComplete(questId) then
Nenue@77 512 print(questID, added)
Nenue@77 513 plugin:Update(X_QUEST_ADDED, questID)
Nenue@77 514 end
Nenue@77 515 else
Nenue@77 516 print()
Nenue@77 517 plugin:Update(X_QUEST)
Nenue@77 518 end
Nenue@77 519 elseif event == 'QUEST_LOG_UPDATE' then
Nenue@77 520 plugin:Update(X_MODULE_QUEST)
Nenue@77 521 elseif event == 'QUEST_POI_UPDATE' then
Nenue@77 522
Nenue@77 523 if GetCVar("trackQuestSorting") == "proximity" then
Nenue@77 524 -- todo: sort blocks
Nenue@77 525 end
Nenue@77 526 plugin:Update(X_MODULE_QUEST)
Nenue@77 527 elseif event == 'PLAYER_MONEY' then
Nenue@77 528 plugin:Update(X_MONEY)
Nenue@77 529 end
Nenue@77 530
Nenue@77 531 end
Nenue@77 532
Nenue@77 533 -- adjusts money events bitcode when a tracker is displaying money data
Nenue@77 534 function plugin:UpdateMoneyFlag(watchMoney, reason)
Nenue@77 535 if watchMoney then
Nenue@77 536 if (band(X_MONEY, reason) == 0) then
Nenue@77 537 X_MONEY = X_MONEY - reason
Nenue@77 538 end
Nenue@77 539 else
Nenue@77 540 if (band(X_MONEY, reason) > 0) then
Nenue@77 541 X_MONEY = X_MONEY + reason
Nenue@77 542 end
Nenue@77 543 end
Nenue@77 544 end
Nenue@77 545
Nenue@77 546 -- used by framescripts to poke the updater when an animation has ended
Nenue@77 547 function plugin:UpdateAnimation(block)
Nenue@77 548
Nenue@77 549 local reason = block.handler.updateReasonEvents
Nenue@77 550 if block.animating then
Nenue@77 551 if (band(X_ANIMATION, reason) == 0) then
Nenue@77 552 X_ANIMATION = X_ANIMATION - reason
Nenue@77 553 end
Nenue@77 554 else
Nenue@77 555 if (band(X_ANIMATION, reason) > 0) then
Nenue@77 556 X_ANIMATION = X_ANIMATION + reason
Nenue@77 557 end
Nenue@77 558 end
Nenue@77 559 end