annotate ObjectiveCore.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
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@22 226 Event.QUEST_WATCH_LIST_CHANGED = function(questID, added)
Nenue@22 227 if ( added ) then
Nenue@22 228 if ( not IsQuestTask(questID) ) then
Nenue@22 229 return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added
Nenue@22 230 end
Nenue@22 231 else
Nenue@22 232 return OBJECTIVE_TRACKER_UPDATE_QUEST, questID, added
Nenue@22 233 end
Nenue@22 234 end
Nenue@22 235 Event.QUEST_POI_UPDATE = function()
Nenue@21 236
Nenue@22 237 QuestPOIUpdateIcons();
Nenue@22 238 if ( GetCVar("trackQuestSorting") == "proximity" ) then
Nenue@22 239 SortQuestWatches();
Nenue@22 240 end
Nenue@21 241
Nenue@22 242 return OBJECTIVE_TRACKER_UPDATE_ALL
Nenue@21 243
Nenue@22 244 end
Nenue@22 245 Event.SUPER_TRACKED_QUEST_CHANGED = function()
Nenue@22 246 return OBJECTIVE_TRACKER_UPDATE_QUEST
Nenue@22 247 end
Nenue@22 248 Event.ZONE_CHANGED = function()
Nenue@21 249
Nenue@22 250 local inMicroDungeon = IsPlayerInMicroDungeon();
Nenue@22 251 if ( inMicroDungeon ~= mod.inMicroDungeon ) then
Nenue@19 252 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
Nenue@19 253 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker
Nenue@19 254 end
Nenue@22 255 --SortQuestWatches();
Nenue@22 256 mod.inMicroDungeon = inMicroDungeon;
Nenue@0 257 end
Nenue@0 258 end
Nenue@22 259 Event.QUEST_AUTOCOMPLETE = function(questId)
Nenue@22 260 AddAutoQuestPopUp(questId, "COMPLETE");
Nenue@22 261 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST + OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP
Nenue@22 262 end
Nenue@22 263 Event.SCENARIO_CRITERIA_UPDATE = function()
Nenue@22 264 return OBJECTIVE_TRACKER_UPDATE_SCENARIO
Nenue@22 265 end
Nenue@22 266 Event.SCENARIO_UPDATE = function(newStage)
Nenue@22 267 if ( newStage ) then
Nenue@22 268 return OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE
Nenue@22 269 else
Nenue@22 270 return OBJECTIVE_TRACKER_UPDATE_SCENARIO
Nenue@22 271 end
Nenue@22 272 end
Nenue@22 273 Event.TRACKED_ACHIEVEMENT_UPDATE = function()
Nenue@22 274 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
Nenue@22 275 end
Nenue@22 276 Event.TRACKED_ACHIEVEMENT_LIST_CHANGED = function(achievementID, added)
Nenue@22 277 if ( added ) then
Nenue@22 278 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, achievementID
Nenue@22 279 else
Nenue@22 280 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
Nenue@22 281 end
Nenue@22 282 end
Nenue@22 283 Event.ZONE_CHANGED_NEW_AREA = function ()
Nenue@22 284 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
Nenue@22 285 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker
Nenue@22 286 end
Nenue@22 287 SortQuestWatches();
Nenue@22 288 mod.currentZoneArea = GetCurrentMapAreaID()
Nenue@22 289 print('Updating zone ID to', mod.currentZoneArea, '=', GetZoneText(), GetMinimapZoneText())
Nenue@22 290
Nenue@22 291
Nenue@22 292 return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED
Nenue@22 293 end
Nenue@22 294
Nenue@22 295
Nenue@22 296 Event.PLAYER_MONEY = function()
Nenue@22 297 if mod.watchMoneyReasons > 0 then
Nenue@22 298 return mod.watchMoneyReasons
Nenue@22 299 end
Nenue@22 300 end
Nenue@22 301 Event.CRITERIA_COMPLETE = function()
Nenue@22 302 return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE
Nenue@22 303 end
Nenue@22 304 Event.QUEST_TURN_IN = function(questID, xp, money)
Nenue@22 305 if ( IsQuestTask(questID) ) then
Nenue@22 306 mod.Bonus:OnTurnIn(questID, xp, money)
Nenue@22 307 print('updating bonus modules (code', OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, ',', questID, xp, money)
Nenue@22 308 return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, questID, xp, money
Nenue@22 309 else
Nenue@22 310 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, questID, xp, money
Nenue@22 311 end
Nenue@22 312 end
Nenue@22 313 mod.Event = Event
Nenue@0 314
Nenue@19 315 --- Done once per ui load
Nenue@19 316 local BlizzHooks = {
Nenue@19 317 ['AddQuestWatch'] = 'AddQuestWatch',
Nenue@19 318 ['RemoveQuestWatch'] = 'RemoveQuestWatch',
Nenue@19 319 ['AbandonQuest'] = 'AbandonQuest',
Nenue@19 320 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
Nenue@19 321 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp',
Nenue@19 322 ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp',
Nenue@19 323 ['AddTrackedAchievement'] = 'AddTrackedAchievement',
Nenue@19 324 ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement',
Nenue@19 325 ['SetSuperTrackedQuestID'] = 'SetSuperTrackedQuestID'
Nenue@19 326 }
Nenue@19 327 local VeneerData
Nenue@22 328
Nenue@22 329 mod.SetWatchMoney = function(watchMoney, reason)
Nenue@22 330 if watchMoney then
Nenue@22 331 if band(mod.watchMoneyReasons, reason) == 0 then
Nenue@22 332 mod.watchMoneyReasons = mod.watchMoneyReasons + reason;
Nenue@22 333 end
Nenue@22 334 else
Nenue@22 335 if band(mod.watchMoneyReasons, reason) > 0 then
Nenue@22 336 mod.watchMoneyReasons = mod.watchMoneyReasons - reason;
Nenue@22 337 end
Nenue@22 338 end
Nenue@22 339 end
Nenue@22 340
Nenue@22 341
Nenue@16 342 function mod:OnInitialize()
Nenue@19 343 local c = mod.Conf.Wrapper
Nenue@19 344 VeneerData = _G.VeneerData
Nenue@19 345 VeneerData.CallLog = VeneerData.CallLog or {}
Nenue@19 346 if not mod.isHooked then
Nenue@19 347 mod.isHooked = true
Nenue@19 348 for blizzFunc, veneerFunc in pairs(BlizzHooks) do
Nenue@19 349 if mod[veneerFunc] then
Nenue@19 350 hooksecurefunc(blizzFunc, mod[veneerFunc])
Nenue@19 351 else
Nenue@19 352 hooksecurefunc(blizzFunc, function(...)
Nenue@19 353 print('|cFFFF0088securehook('..tostring(blizzFunc)..')|r args:', ...)
Nenue@19 354 tinsert(VeneerData.CallLog, {blizzFunc, ...})
Nenue@19 355 end)
Nenue@19 356 end
Nenue@19 357 end
Nenue@19 358 end
Nenue@22 359
Nenue@22 360 mod.Conf.TasksLog = mod.Conf.TasksLog or {}
Nenue@22 361
Nenue@19 362 Scroller:SetScrollChild(Scroll)
Nenue@19 363 Scroller:SetWidth(c.Width)
Nenue@19 364 Scroll:SetWidth(c.Width)
Nenue@21 365 Scroll:ClearAllPoints()
Nenue@21 366 Scroll:SetPoint('TOP', Scroller, 'TOP')
Nenue@0 367 ObjectiveTrackerFrame:UnregisterAllEvents()
Nenue@0 368 ObjectiveTrackerFrame:Hide()
Nenue@0 369 end
Nenue@19 370
Nenue@22 371 function mod:OnEvent (event, ...)
Nenue@22 372 local isHandled
Nenue@22 373 print('OnEvent(|cFF00FF00'.. event ..'|r):', ...)
Nenue@22 374 local reason, arg1, arg2, arg3
Nenue@22 375 if Event[event] then
Nenue@22 376 if type(Event[event]) == 'function' then
Nenue@22 377 PlaySoundFile([[Interface\Addons\SharedMedia_MyMedia\sound\Info.ogg]])
Nenue@22 378 reason, arg1, arg2, arg3 = Event[event](...)
Nenue@22 379 elseif type(Event[event]) == 'table' then
Nenue@22 380 PlaySoundFile([[Interface\Addons\SharedMedia_MyMedia\sound\Link.ogg]])
Nenue@22 381 for i, action in ipairs(Event[event]) do
Nenue@22 382 if type(action) == 'function' then
Nenue@22 383 reason, arg1, arg2, arg3 = action(event, ...)
Nenue@22 384 else
Nenue@22 385 reason = action
Nenue@22 386 end
Nenue@22 387
Nenue@22 388 if reason then
Nenue@22 389 mod:Update(reason, arg1, arg2, arg3)
Nenue@22 390 end
Nenue@22 391 end
Nenue@22 392 else
Nenue@22 393 PlaySoundFile([[Interface\Addons\SharedMedia_MyMedia\sound\Heart.ogg]])
Nenue@22 394 reason = Event[event]
Nenue@22 395 end
Nenue@22 396 else
Nenue@22 397 PlaySoundFile([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
Nenue@22 398 end
Nenue@22 399 if reason then
Nenue@22 400 mod:Update(reason, arg1, arg2, arg3)
Nenue@22 401 else
Nenue@22 402 print('no reason value returned')
Nenue@22 403 PlaySoundFile([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
Nenue@22 404 end
Nenue@22 405 end
Nenue@22 406
Nenue@19 407 --- Done any time the the minimize button is toggled up
Nenue@19 408 function mod:OnEnable()
Nenue@19 409 for id, name in ipairs(mod.orderedNames) do
Nenue@19 410 if not mod.orderedHandlers[id] then
Nenue@21 411 Handler_Initialize(mod.DefaultHandler, name, id)
Nenue@19 412 end
Nenue@19 413 end
Nenue@19 414
Nenue@22 415 for event, action in pairs(Event) do
Nenue@22 416 print('|cFFFF0088listen to', event, 'for action|r', tostring(action))
Nenue@22 417 Wrapper:RegisterEvent(event)
Nenue@22 418 end
Nenue@22 419
Nenue@21 420 Wrapper:SetScript('OnEvent', mod.OnEvent)
Nenue@19 421
Nenue@19 422 local c = mod.Conf.Wrapper
Nenue@21 423 --Wrapper:SetPoint(c.AnchorPoint, UIParent, c.AnchorPoint, c.OffsetX, c.OffsetY)
Nenue@21 424 --B.Conf.FramePosition[Wrapper:GetName()] = {c.AnchorPoint, c.AnchorPoint, c.OffsetX, c.OffsetY}
Nenue@19 425 Wrapper:SetWidth(c.Width)
Nenue@19 426
Nenue@19 427
Nenue@19 428 mod.InitializeWidgets()
Nenue@19 429 mod:Update()
Nenue@19 430 end
Nenue@19 431
Nenue@19 432 function mod:OnDisable()
Nenue@22 433 Wrapper:UnregisterAllEvents()
Nenue@19 434 end
Nenue@19 435
Nenue@19 436