Mercurial > wow > buffalo2
diff ObjectiveTracker/ObjectiveTracker.lua @ 37:e84d645c8ab8
- revised the tracker update function to build its complete data list up front and use the values as points of comparison for determining possible out of place blocks, which will be iterated over afterward to remove what wasn't re-used
- also entailed revising the exact role of global event handlers and function hooks, limiting their directions of communication so one doesn't end up calling the other multiple or inifinity times
- schema handling polish
author | Nenue |
---|---|
date | Mon, 18 Apr 2016 07:56:23 -0400 |
parents | 69d03f8e293e |
children | 1f8f9cc3d956 |
line wrap: on
line diff
--- a/ObjectiveTracker/ObjectiveTracker.lua Sun Apr 17 13:00:31 2016 -0400 +++ b/ObjectiveTracker/ObjectiveTracker.lua Mon Apr 18 07:56:23 2016 -0400 @@ -126,8 +126,10 @@ freeBlocks = {}, --- blocks hidden due to list shrinkage usedBlocks = {}, --- block in use BlockInfo = {}, --- by block creation offset, used by framescript + WatchList = {}, --- ordered manifest of watched items --- Indexes + InfoBlock = {}, --- by unique ID LogBlock = {}, --- by API log offset, used by GetBlock if possible WatchBlock = {}, --- block by internal offset, used in GetBlock scope WatchInfo = {}, --- info by internal offset, used in Update scope @@ -154,6 +156,7 @@ T.Cheevs = { name = "Cheevs", displayName = "Achievements", + schema = 'achievement', updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT, updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT + OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, @@ -258,12 +261,12 @@ end Event.QUEST_WATCH_LIST_CHANGED = function(questID, added) - if ( added ) then + if ( added == true ) then if ( not IsQuestTask(questID) ) then return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added end - else - return OBJECTIVE_TRACKER_UPDATE_QUEST, questID, added + elseif questID then + return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added end end @@ -274,8 +277,8 @@ end return OBJECTIVE_TRACKER_UPDATE_ALL end -Event.SUPER_TRACKED_QUEST_CHANGED = function() - return OBJECTIVE_TRACKER_UPDATE_QUEST +Event.SUPER_TRACKED_QUEST_CHANGED = function(questID) + return OBJECTIVE_TRACKER_UPDATE_QUEST, questID end Event.ZONE_CHANGED = function() local inMicroDungeon = IsPlayerInMicroDungeon(); @@ -306,11 +309,7 @@ return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT end Event.TRACKED_ACHIEVEMENT_LIST_CHANGED = function(achievementID, added) - if ( added ) then - return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, achievementID - else - return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT - end + return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, achievementID, added end Event.ZONE_CHANGED_NEW_AREA = function () if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then @@ -452,38 +451,26 @@ local Play = function(file) if Devian and Devian.InWorkspace() then PlaySoundFile(file) end end +local tprint = B.print('Tracker') T.OnHookedFunc = function(name, ...) - print('|cFFFF8800securehook:|r', name, '|cFF00FFFFargs:|r', ...) - local updateReason = T[name](...) + tprint('|cFFFF8800securehook:|r', name, '|cFF00FFFFargs:|r', ...) + local updateReason, arg1, arg2, arg3 = T[name](...) if updateReason then - print('|cFF00FFFFupdate reason:|r', updateReason) - T:Update(updateReason) + print('|cFF00FFFFupdate reason:|r', updateReason, arg1, arg2, arg3) + T:Update(updateReason, arg1, arg2, arg3) end end function T:OnEvent (event, ...) local isHandled - print('OnEvent(|cFF00FF00'.. event ..'|r):', ...) + tprint('OnEvent(|cFF00FF00'.. event ..'|r):', ...) local reason, arg1, arg2, arg3 if Event[event] then if type(Event[event]) == 'function' then Play([[Interface\Addons\SharedMedia_MyMedia\sound\Info.ogg]]) reason, arg1, arg2, arg3 = Event[event](...) - elseif type(Event[event]) == 'table' then - Play([[Interface\Addons\SharedMedia_MyMedia\sound\Link.ogg]]) - for i, action in ipairs(Event[event]) do - if type(action) == 'function' then - reason, arg1, arg2, arg3 = action(event, ...) - else - reason = action - end - - if reason then - T:Update(reason, arg1, arg2, arg3) - end - end else - --Play([[Interface\Addons\SharedMedia_MyMedia\sound\Heart.ogg]]) + Play([[Interface\Addons\SharedMedia_MyMedia\sound\Heart.ogg]]) reason = Event[event] end else