annotate ObjectiveTracker/ObjectiveCore.lua @ 23:e837384ac363

Separating objective tracker module
author Nenue
date Sun, 10 Apr 2016 04:35:32 -0400
parents ObjectiveCore.lua@9b3fa734abff
children 66b927b46776
rev   line source
Nenue@0 1 --- ${PACKAGE_NAME}
Nenue@0 2 -- @file-author@
Nenue@0 3 -- @project-revision@ @project-hash@
Nenue@0 4 -- @file-revision@ @file-hash@
Nenue@0 5 -- Created: 3/26/2016 1:51 AM
Nenue@19 6 local B, _G = select(2,...).frame, _G
Nenue@22 7 local pairs, setmetatable, type, tostring, band, format = _G.pairs, _G.setmetatable, _G.type, _G.tostring, bit.band, string.format
Nenue@22 8 local ipairs, tinsert, hooksecurefunc = _G.ipairs, _G.tinsert, _G.hooksecurefunc
Nenue@22 9 local PlaySoundFile, IsQuestTask, SortQuestWatches, GetCurrentMapAreaID, GetZoneText, GetMinimapZoneText = PlaySoundFile, IsQuestTask, SortQuestWatches, GetCurrentMapAreaID, GetZoneText, GetMinimapZoneText
Nenue@22 10 local AddQuestWatch, SetSuperTrackedQuestID, GetNumQuestWatches, AUTO_QUEST_WATCH, MAX_WATCHABLE_QUESTS = AddQuestWatch, SetSuperTrackedQuestID, GetNumQuestWatches, AUTO_QUEST_WATCH, MAX_WATCHABLE_QUESTS
Nenue@22 11 local QuestPOIUpdateIcons, GetCVar, IsPlayerInMicroDungeon, WorldMapFrame, GetCVarBool, SetMapToCurrentZone = QuestPOIUpdateIcons, GetCVar, IsPlayerInMicroDungeon, WorldMapFrame, GetCVarBool, SetMapToCurrentZone
Nenue@22 12 local AddAutoQuestPopUp = AddAutoQuestPopUp
Nenue@16 13 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
Nenue@0 14 local print = B.print('Objectives')
Nenue@19 15 local ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame = _G.ObjectiveTrackerFrame, _G.VeneerObjectiveScroll, _G.CreateFrame
Nenue@19 16 local Wrapper = _G.VeneerObjectiveWrapper
Nenue@19 17 local Scroller = VeneerObjectiveWrapper.scrollArea
Nenue@19 18 local Scroll = _G.VeneerObjectiveScroll
Nenue@16 19
Nenue@16 20 --- Performance values
Nenue@16 21 --[[
Nenue@16 22 self:RegisterEvent("QUEST_LOG_UPDATE");
Nenue@16 23 self:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED");
Nenue@16 24 self:RegisterEvent("QUEST_WATCH_LIST_CHANGED");
Nenue@16 25 self:RegisterEvent("QUEST_AUTOCOMPLETE");
Nenue@16 26 self:RegisterEvent("QUEST_ACCEPTED");
Nenue@16 27 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED");
Nenue@16 28 self:RegisterEvent("SCENARIO_UPDATE");
Nenue@16 29 self:RegisterEvent("SCENARIO_CRITERIA_UPDATE");
Nenue@16 30 self:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE");
Nenue@16 31 self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
Nenue@16 32 self:RegisterEvent("ZONE_CHANGED");
Nenue@16 33 self:RegisterEvent("QUEST_POI_UPDATE");
Nenue@16 34 self:RegisterEvent("VARIABLES_LOADED");
Nenue@16 35 self:RegisterEvent("QUEST_TURNED_IN");
Nenue@16 36 self:RegisterEvent("PLAYER_MONEY");
Nenue@16 37 ]]
Nenue@16 38
Nenue@19 39
Nenue@19 40 --- These are the bitfields used by Blizzard_ObjectiveTracker to determine which segments get parsed.
Nenue@19 41 --- They are replicated here so that plugins can make use of any securehook args involving this info.
Nenue@19 42 local OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST -- 0x0100
Nenue@19 43 local OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP = OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP -- 0x0200
Nenue@19 44 local OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE -- 0x0400
Nenue@19 45 local OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO -- 0x0800
Nenue@19 46 local OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT -- 0x1000
Nenue@19 47
Nenue@19 48
Nenue@19 49 local OBJECTIVE_TRACKER_UPDATE_STATIC = OBJECTIVE_TRACKER_UPDATE_STATIC -- 0x0000
Nenue@19 50 local OBJECTIVE_TRACKER_UPDATE_ALL = OBJECTIVE_TRACKER_UPDATE_ALL -- 0xFFFF
Nenue@19 51 local OBJECTIVE_TRACKER_UPDATE_ID = OBJECTIVE_TRACKER_UPDATE_ID -- 0
Nenue@19 52
Nenue@19 53 local OBJECTIVE_TRACKER_UPDATE_QUEST = OBJECTIVE_TRACKER_UPDATE_QUEST -- 0x0001
Nenue@19 54 local OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED = OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED -- 0x0002
Nenue@19 55 local OBJECTIVE_TRACKER_UPDATE_TASK_ADDED = OBJECTIVE_TRACKER_UPDATE_TASK_ADDED -- 0x0004
Nenue@19 56 local OBJECTIVE_TRACKER_UPDATE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_SCENARIO -- 0x0008
Nenue@19 57 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE = OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE -- 0x0010
Nenue@19 58 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT -- 0x0020
Nenue@19 59 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED -- 0x0040
Nenue@19 60 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED = OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED -- 0x0080
Nenue@19 61
Nenue@19 62 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_ALL -- default
Nenue@19 63 --- Used to determine which trackers are listening for money events
Nenue@21 64 mod.watchMoneyReasons = 0
Nenue@0 65
Nenue@19 66 --- Baseline defaults table; values defined in the files that they pertain to
Nenue@16 67 mod.defaults = {}
Nenue@10 68
Nenue@19 69 --- Tracker display order
Nenue@16 70 mod.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'}
Nenue@0 71
Nenue@19 72 --- ipairs() argument tables
Nenue@19 73 mod.orderedHandlers = setmetatable({}, {__mode = "k"})
Nenue@19 74 mod.orderedTrackers = setmetatable({}, {__mode = "k"})
Nenue@19 75 mod.indexedTrackers = setmetatable({}, {__mode = "k"})
Nenue@0 76
Nenue@19 77 --- pairs() argument tables
Nenue@19 78 mod.namedTrackers = setmetatable({}, {__mode = "k"})
Nenue@19 79
Nenue@19 80 local WRAPPER_ANCHOR_POINT = 'TOPRIGHT'
Nenue@19 81 local WRAPPER_OFFSET_X = 0
Nenue@19 82 local WRAPPER_OFFSET_Y = -200
Nenue@19 83 local WRAPPER_MAX_HEIGHT = 670
Nenue@19 84 local WRAPPER_WIDTH = 280
Nenue@19 85 local WRAPPER_HEADER_HEIGHT = 24
Nenue@19 86
Nenue@19 87 mod.defaults.Wrapper = {
Nenue@19 88 AnchorPoint = WRAPPER_ANCHOR_POINT,
Nenue@19 89 OffsetX = WRAPPER_OFFSET_X,
Nenue@19 90 OffsetY = WRAPPER_OFFSET_Y,
Nenue@19 91 Height = WRAPPER_MAX_HEIGHT,
Nenue@19 92 Width = WRAPPER_WIDTH,
Nenue@21 93 HeaderHeight = WRAPPER_HEADER_HEIGHT,
Nenue@21 94 TextSpacing = 3,
Nenue@21 95 TitleSpacing = 3,
Nenue@19 96 }
Nenue@21 97
Nenue@21 98
Nenue@21 99
Nenue@19 100 --- Tracker module definitions begin here; innards dealing with data retreival and output are defined further in
Nenue@21 101 mod.DefaultHandler = {
Nenue@19 102 previousHeight = 0,
Nenue@19 103
Nenue@19 104 name = "temp",
Nenue@19 105 displayName = "temp",
Nenue@19 106 updateReasonModule = 0xFF00,
Nenue@19 107 updateReasonEvent = 0x00FF,
Nenue@19 108
Nenue@19 109 numWatched = 0, --- number of entries being handled
Nenue@19 110 numBlocks = 0, --- number of blocks created
Nenue@19 111 actualBlocks = 0, --- number of blocks in use
Nenue@19 112
Nenue@19 113 freeBlocks = {}, --- block heap
Nenue@19 114 usedBlocks = {},
Nenue@19 115
Nenue@19 116 Info = {}, -- find data by ID
Nenue@19 117 BlockInfo = {}, -- find data by block ID
Nenue@19 118 Watched = {}, -- find watchIndex by data ID
Nenue@19 119 WatchInfo = {}, -- find data by watch index
Nenue@19 120 WatchBlock = {}, -- find block by watch index
Nenue@19 121 }
Nenue@19 122
Nenue@16 123 mod.AutoQuest = {
Nenue@14 124 name = "AutoQuest",
Nenue@16 125 displayName = "Notice",
Nenue@19 126 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST,
Nenue@19 127 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST +
Nenue@19 128 OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED,
Nenue@0 129 }
Nenue@16 130 mod.Quest = {
Nenue@14 131 name = "Quest",
Nenue@14 132 displayName = "Quests",
Nenue@19 133 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST,
Nenue@19 134 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST +
Nenue@19 135 OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED,
Nenue@0 136 }
Nenue@16 137 mod.Cheevs = {
Nenue@14 138 name = "Cheevs",
Nenue@14 139 displayName = "Achievements",
Nenue@19 140 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT,
Nenue@19 141 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT +
Nenue@19 142 OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED,
Nenue@14 143 }
Nenue@16 144 mod.Bonus = {
Nenue@14 145 name = "Bonus",
Nenue@14 146 displayName = "Bonus Objectives",
Nenue@19 147 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE,
Nenue@22 148 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_TASK_ADDED
Nenue@0 149 }
Nenue@0 150
Nenue@19 151 local Tracker_string = function (self)
Nenue@19 152 return self.name
Nenue@19 153 end
Nenue@19 154 local Tracker_call = function (self, reason)
Nenue@19 155 self:Update(reason)
Nenue@19 156 end
Nenue@21 157 local Handler_Initialize = function (self, name, index)
Nenue@19 158 print('Initializing |cFF00FFFF'..name..'|r module...')
Nenue@16 159
Nenue@16 160 local handler = setmetatable(mod[name] or {}, {
Nenue@19 161 __tostring = Tracker_string,
Nenue@19 162 __call = Tracker_call
Nenue@0 163 })
Nenue@16 164 if type(mod.orderedHandlers[index]) == 'table' then
Nenue@16 165 return mod.orderedHandlers[index]
Nenue@0 166 end
Nenue@0 167
Nenue@19 168 print('|cFFFFFF00Acquiring locals')
Nenue@0 169 local preset = {}
Nenue@19 170 for k, _ in pairs(handler) do
Nenue@0 171 preset[k] = true
Nenue@0 172 end
Nenue@0 173
Nenue@16 174
Nenue@19 175 print('|cFFFF8800Inheriting')
Nenue@0 176 for k, v in pairs(self) do
Nenue@0 177 if not handler[k] then
Nenue@0 178 if type(v) == 'table' then
Nenue@0 179 -- assume all tables to be local data; don't inherit or ref
Nenue@0 180 handler[k] = {}
Nenue@0 181 else
Nenue@19 182 handler[k] = self[k]
Nenue@0 183 end
Nenue@19 184 print('copying', k)
Nenue@0 185 end
Nenue@0 186 end
Nenue@0 187 print('|cFFFF4400'..tostring(name)..'|r:')
Nenue@0 188 for k, v in pairs(handler) do
Nenue@19 189 print(format("%32s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v)))
Nenue@0 190 end
Nenue@16 191
Nenue@16 192 mod[name] = handler
Nenue@16 193
Nenue@19 194 local trackerName = 'Veneer'..name..'Tracker'
Nenue@19 195 local handler = mod[name]
Nenue@19 196 local frame = CreateFrame('Frame', trackerName, _G.VeneerObjectiveScroll, 'VeneerTrackerTemplate')
Nenue@19 197 frame.title:SetText(handler.displayName)
Nenue@19 198 mod.SetBlockStyle(frame, 'Tracker', 'Normal')
Nenue@19 199 handler.frame = frame
Nenue@19 200 handler.trackerName = trackerName
Nenue@21 201 handler.lines = {}
Nenue@19 202 mod.orderedTrackers[index] = frame
Nenue@19 203 mod.namedTrackers[name] = frame
Nenue@19 204 mod.indexedTrackers[handler] = frame
Nenue@19 205 print('|cFFFF0088' .. trackerName .. '|r created for |cFF00FFFF' .. handler.displayName .. '|r module')
Nenue@19 206
Nenue@16 207 mod.orderedHandlers[index] = handler
Nenue@0 208 return true
Nenue@0 209 end
Nenue@0 210
Nenue@22 211 local Event = {}
Nenue@22 212 Event.QUEST_LOG_UPDATE = function()
Nenue@22 213 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST + OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE
Nenue@22 214 end
Nenue@22 215 Event.QUEST_ACCEPTED = function(questLogIndex, questID)
Nenue@22 216 if ( IsQuestTask(questID) ) then
Nenue@22 217 return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED, questID
Nenue@22 218 else
Nenue@22 219 if ( AUTO_QUEST_WATCH == "1" and GetNumQuestWatches() < MAX_WATCHABLE_QUESTS ) then
Nenue@22 220 AddQuestWatch(questLogIndex);
Nenue@22 221 SetSuperTrackedQuestID(questID);
Nenue@22 222 end
Nenue@22 223 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST
Nenue@22 224 end
Nenue@22 225 end
Nenue@23 226
Nenue@22 227 Event.QUEST_WATCH_LIST_CHANGED = function(questID, added)
Nenue@22 228 if ( added ) then
Nenue@22 229 if ( not IsQuestTask(questID) ) then
Nenue@22 230 return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added
Nenue@22 231 end
Nenue@22 232 else
Nenue@22 233 return OBJECTIVE_TRACKER_UPDATE_QUEST, questID, added
Nenue@22 234 end
Nenue@22 235 end
Nenue@23 236
Nenue@22 237 Event.QUEST_POI_UPDATE = function()
Nenue@22 238 QuestPOIUpdateIcons();
Nenue@22 239 if ( GetCVar("trackQuestSorting") == "proximity" ) then
Nenue@22 240 SortQuestWatches();
Nenue@22 241 end
Nenue@22 242 return OBJECTIVE_TRACKER_UPDATE_ALL
Nenue@22 243 end
Nenue@22 244 Event.SUPER_TRACKED_QUEST_CHANGED = function()
Nenue@22 245 return OBJECTIVE_TRACKER_UPDATE_QUEST
Nenue@22 246 end
Nenue@22 247 Event.ZONE_CHANGED = function()
Nenue@21 248
Nenue@22 249 local inMicroDungeon = IsPlayerInMicroDungeon();
Nenue@22 250 if ( inMicroDungeon ~= mod.inMicroDungeon ) then
Nenue@19 251 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
Nenue@19 252 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker
Nenue@19 253 end
Nenue@22 254 --SortQuestWatches();
Nenue@22 255 mod.inMicroDungeon = inMicroDungeon;
Nenue@0 256 end
Nenue@0 257 end
Nenue@22 258 Event.QUEST_AUTOCOMPLETE = function(questId)
Nenue@22 259 AddAutoQuestPopUp(questId, "COMPLETE");
Nenue@22 260 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST + OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP
Nenue@22 261 end
Nenue@22 262 Event.SCENARIO_CRITERIA_UPDATE = function()
Nenue@22 263 return OBJECTIVE_TRACKER_UPDATE_SCENARIO
Nenue@22 264 end
Nenue@22 265 Event.SCENARIO_UPDATE = function(newStage)
Nenue@22 266 if ( newStage ) then
Nenue@22 267 return OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE
Nenue@22 268 else
Nenue@22 269 return OBJECTIVE_TRACKER_UPDATE_SCENARIO
Nenue@22 270 end
Nenue@22 271 end
Nenue@22 272 Event.TRACKED_ACHIEVEMENT_UPDATE = function()
Nenue@22 273 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
Nenue@22 274 end
Nenue@22 275 Event.TRACKED_ACHIEVEMENT_LIST_CHANGED = function(achievementID, added)
Nenue@22 276 if ( added ) then
Nenue@22 277 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, achievementID
Nenue@22 278 else
Nenue@22 279 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
Nenue@22 280 end
Nenue@22 281 end
Nenue@22 282 Event.ZONE_CHANGED_NEW_AREA = function ()
Nenue@22 283 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
Nenue@22 284 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker
Nenue@22 285 end
Nenue@22 286 SortQuestWatches();
Nenue@22 287 mod.currentZoneArea = GetCurrentMapAreaID()
Nenue@22 288 print('Updating zone ID to', mod.currentZoneArea, '=', GetZoneText(), GetMinimapZoneText())
Nenue@22 289
Nenue@22 290
Nenue@22 291 return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED
Nenue@22 292 end
Nenue@22 293
Nenue@22 294
Nenue@22 295 Event.PLAYER_MONEY = function()
Nenue@22 296 if mod.watchMoneyReasons > 0 then
Nenue@22 297 return mod.watchMoneyReasons
Nenue@22 298 end
Nenue@22 299 end
Nenue@22 300 Event.CRITERIA_COMPLETE = function()
Nenue@22 301 return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE
Nenue@22 302 end
Nenue@22 303 Event.QUEST_TURN_IN = function(questID, xp, money)
Nenue@22 304 if ( IsQuestTask(questID) ) then
Nenue@22 305 mod.Bonus:OnTurnIn(questID, xp, money)
Nenue@22 306 print('updating bonus modules (code', OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, ',', questID, xp, money)
Nenue@22 307 return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, questID, xp, money
Nenue@22 308 else
Nenue@22 309 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, questID, xp, money
Nenue@22 310 end
Nenue@22 311 end
Nenue@22 312 mod.Event = Event
Nenue@0 313
Nenue@19 314 --- Done once per ui load
Nenue@19 315 local BlizzHooks = {
Nenue@19 316 ['AddQuestWatch'] = 'AddQuestWatch',
Nenue@19 317 ['RemoveQuestWatch'] = 'RemoveQuestWatch',
Nenue@19 318 ['AbandonQuest'] = 'AbandonQuest',
Nenue@19 319 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
Nenue@19 320 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp',
Nenue@19 321 ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp',
Nenue@19 322 ['AddTrackedAchievement'] = 'AddTrackedAchievement',
Nenue@19 323 ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement',
Nenue@19 324 ['SetSuperTrackedQuestID'] = 'SetSuperTrackedQuestID'
Nenue@19 325 }
Nenue@19 326 local VeneerData
Nenue@22 327
Nenue@22 328 mod.SetWatchMoney = function(watchMoney, reason)
Nenue@22 329 if watchMoney then
Nenue@22 330 if band(mod.watchMoneyReasons, reason) == 0 then
Nenue@22 331 mod.watchMoneyReasons = mod.watchMoneyReasons + reason;
Nenue@22 332 end
Nenue@22 333 else
Nenue@22 334 if band(mod.watchMoneyReasons, reason) > 0 then
Nenue@22 335 mod.watchMoneyReasons = mod.watchMoneyReasons - reason;
Nenue@22 336 end
Nenue@22 337 end
Nenue@22 338 end
Nenue@23 339 mod.animateReasons = 0
Nenue@23 340 mod.SetAnimate = function(animate, reason)
Nenue@23 341 if animate then
Nenue@23 342 if band(mod.animateReasons, reason) == 0 then
Nenue@23 343 mod.animateReasons = mod.animateReasons + reason
Nenue@23 344 end
Nenue@23 345 else
Nenue@23 346 if band(mod.animateReasons, reason) > 0 then
Nenue@23 347 mod.animateReasons = mod.animateReasons - reason
Nenue@23 348 end
Nenue@23 349 end
Nenue@23 350 end
Nenue@22 351
Nenue@22 352
Nenue@16 353 function mod:OnInitialize()
Nenue@19 354 local c = mod.Conf.Wrapper
Nenue@19 355 VeneerData = _G.VeneerData
Nenue@19 356 VeneerData.CallLog = VeneerData.CallLog or {}
Nenue@19 357 if not mod.isHooked then
Nenue@19 358 mod.isHooked = true
Nenue@19 359 for blizzFunc, veneerFunc in pairs(BlizzHooks) do
Nenue@19 360 if mod[veneerFunc] then
Nenue@19 361 hooksecurefunc(blizzFunc, mod[veneerFunc])
Nenue@19 362 else
Nenue@19 363 hooksecurefunc(blizzFunc, function(...)
Nenue@19 364 print('|cFFFF0088securehook('..tostring(blizzFunc)..')|r args:', ...)
Nenue@19 365 tinsert(VeneerData.CallLog, {blizzFunc, ...})
Nenue@19 366 end)
Nenue@19 367 end
Nenue@19 368 end
Nenue@19 369 end
Nenue@22 370
Nenue@22 371 mod.Conf.TasksLog = mod.Conf.TasksLog or {}
Nenue@22 372
Nenue@19 373 Scroller:SetScrollChild(Scroll)
Nenue@19 374 Scroller:SetWidth(c.Width)
Nenue@19 375 Scroll:SetWidth(c.Width)
Nenue@21 376 Scroll:ClearAllPoints()
Nenue@21 377 Scroll:SetPoint('TOP', Scroller, 'TOP')
Nenue@0 378 ObjectiveTrackerFrame:UnregisterAllEvents()
Nenue@0 379 ObjectiveTrackerFrame:Hide()
Nenue@23 380
Nenue@23 381 if B.Conf.FrameState[Wrapper:GetName()] == 0 then
Nenue@23 382 Scroller:Hide()
Nenue@23 383 end
Nenue@0 384 end
Nenue@19 385
Nenue@23 386 local Play = function(file) if Devian and Devian.InWorkspace() then PlaySoundFile(file) end end
Nenue@23 387
Nenue@22 388 function mod:OnEvent (event, ...)
Nenue@22 389 local isHandled
Nenue@22 390 print('OnEvent(|cFF00FF00'.. event ..'|r):', ...)
Nenue@22 391 local reason, arg1, arg2, arg3
Nenue@22 392 if Event[event] then
Nenue@22 393 if type(Event[event]) == 'function' then
Nenue@23 394 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Info.ogg]])
Nenue@22 395 reason, arg1, arg2, arg3 = Event[event](...)
Nenue@22 396 elseif type(Event[event]) == 'table' then
Nenue@23 397 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Link.ogg]])
Nenue@22 398 for i, action in ipairs(Event[event]) do
Nenue@22 399 if type(action) == 'function' then
Nenue@22 400 reason, arg1, arg2, arg3 = action(event, ...)
Nenue@22 401 else
Nenue@22 402 reason = action
Nenue@22 403 end
Nenue@22 404
Nenue@22 405 if reason then
Nenue@22 406 mod:Update(reason, arg1, arg2, arg3)
Nenue@22 407 end
Nenue@22 408 end
Nenue@22 409 else
Nenue@23 410 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Heart.ogg]])
Nenue@22 411 reason = Event[event]
Nenue@22 412 end
Nenue@22 413 else
Nenue@23 414 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
Nenue@22 415 end
Nenue@22 416 if reason then
Nenue@22 417 mod:Update(reason, arg1, arg2, arg3)
Nenue@22 418 else
Nenue@22 419 print('no reason value returned')
Nenue@23 420 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
Nenue@22 421 end
Nenue@22 422 end
Nenue@22 423
Nenue@19 424 --- Done any time the the minimize button is toggled up
Nenue@19 425 function mod:OnEnable()
Nenue@19 426 for id, name in ipairs(mod.orderedNames) do
Nenue@19 427 if not mod.orderedHandlers[id] then
Nenue@21 428 Handler_Initialize(mod.DefaultHandler, name, id)
Nenue@19 429 end
Nenue@19 430 end
Nenue@19 431
Nenue@22 432 for event, action in pairs(Event) do
Nenue@22 433 print('|cFFFF0088listen to', event, 'for action|r', tostring(action))
Nenue@22 434 Wrapper:RegisterEvent(event)
Nenue@22 435 end
Nenue@22 436
Nenue@21 437 Wrapper:SetScript('OnEvent', mod.OnEvent)
Nenue@19 438 local c = mod.Conf.Wrapper
Nenue@19 439 Wrapper:SetWidth(c.Width)
Nenue@19 440
Nenue@19 441 mod.InitializeWidgets()
Nenue@19 442 mod:Update()
Nenue@23 443
Nenue@23 444
Nenue@19 445 end
Nenue@19 446
Nenue@19 447 function mod:OnDisable()
Nenue@22 448 Wrapper:UnregisterAllEvents()
Nenue@19 449 end
Nenue@19 450
Nenue@19 451