annotate ObjectiveCore.lua @ 18:d1812fb10ae6

ObjectiveStyle - move tag/template logic into the corresponding GetInfo
author Nenue
date Tue, 05 Apr 2016 02:38:01 -0400
parents 880828018bf4
children 605e8f0e46db
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@0 6 local B = select(2,...).frame
Nenue@14 7 local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring
Nenue@14 8 local format = string.format
Nenue@16 9 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
Nenue@0 10 local print = B.print('Objectives')
Nenue@16 11 local ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame = ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame
Nenue@0 12
Nenue@0 13 --[[
Nenue@0 14 Full quest info is available if:
Nenue@0 15 - It's in the player quest log, or is available from the Gossip interface
Nenue@0 16 - It's being shared from another player and is acceptible
Nenue@0 17 - It's an auto-quest that is available in the current location
Nenue@0 18 Partial quest info is availabe if:
Nenue@0 19 - It's already completed (i.e. it appears in CompletedQuestInfo()).
Nenue@0 20 - It's an scheduled interval quest (daily, weekly, etc.)
Nenue@0 21 - It's contained in a quest link received from chat
Nenue@0 22 Under any other circumstances, only minimal info can be pulled:
Nenue@0 23 - Its availability to the player
Nenue@0 24 - Its relation with the currently engaged NPC
Nenue@0 25 - Its binary completion status
Nenue@0 26
Nenue@0 27 ]]
Nenue@16 28
Nenue@16 29
Nenue@16 30 --- Performance values
Nenue@16 31 --[[
Nenue@16 32 self:RegisterEvent("QUEST_LOG_UPDATE");
Nenue@16 33 self:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED");
Nenue@16 34 self:RegisterEvent("QUEST_WATCH_LIST_CHANGED");
Nenue@16 35 self:RegisterEvent("QUEST_AUTOCOMPLETE");
Nenue@16 36 self:RegisterEvent("QUEST_ACCEPTED");
Nenue@16 37 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED");
Nenue@16 38 self:RegisterEvent("SCENARIO_UPDATE");
Nenue@16 39 self:RegisterEvent("SCENARIO_CRITERIA_UPDATE");
Nenue@16 40 self:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE");
Nenue@16 41 self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
Nenue@16 42 self:RegisterEvent("ZONE_CHANGED");
Nenue@16 43 self:RegisterEvent("QUEST_POI_UPDATE");
Nenue@16 44 self:RegisterEvent("VARIABLES_LOADED");
Nenue@16 45 self:RegisterEvent("QUEST_TURNED_IN");
Nenue@16 46 self:RegisterEvent("PLAYER_MONEY");
Nenue@16 47 ]]
Nenue@16 48 mod.Reason ={
Nenue@16 49 UPDATE_MASK_AUTOQUEST = 0x00000001,
Nenue@16 50 UPDATE_MASK_QUEST = 0x00000002,
Nenue@16 51 UPDATE_MASK_BONUS = 0x00000004,
Nenue@16 52 UPDATE_MASK_CHEEVS = 0x00000008,
Nenue@16 53 UPDATE_MASK_ALL = 0x00000017,
Nenue@16 54
Nenue@16 55 QUEST_LOG_UPDATE = 0x00000003,
Nenue@16 56 TRACKED_ACHIEVEMENT_LIST_CHANGED = 0x00000008,
Nenue@16 57 QUEST_WATCH_LIST_CHANGED = 0x00000003,
Nenue@16 58 QUEST_AUTOCOMPLETE = 0x00000003,
Nenue@16 59 QUEST_ACCEPTED = 0x00000003,
Nenue@16 60 SUPER_TRACKED_QUEST_CHANGED = 0x00000002,
Nenue@16 61 SCENARIO_UPDATE = 0x00000004,
Nenue@16 62 SCENARIO_CRITERIA_UPDATE = 0x00000004,
Nenue@16 63 TRACKED_ACHIEVEMENT_UPDATE = 0x00000008,
Nenue@16 64 ZONE_CHANGED_NEW_AREA = 0x00000017,
Nenue@16 65 ZONE_CHANGED = 0x00000017,
Nenue@16 66 QUEST_POI_UPDATE = 0x00000003,
Nenue@16 67 QUEST_TURNED_IN = 0x00000003,
Nenue@16 68 }
Nenue@16 69 mod.MoneyReasons = 0
Nenue@0 70
Nenue@10 71 --- Baseline defaults
Nenue@16 72 mod.defaults = {}
Nenue@10 73
Nenue@0 74 --- list used to make things happen
Nenue@16 75 mod.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'}
Nenue@0 76
Nenue@0 77 --- ipairs() list of handlers for wrapper update
Nenue@16 78 mod.orderedHandlers = {}
Nenue@16 79 mod.orderedTrackers = {}
Nenue@16 80 mod.indexedTrackers = {}
Nenue@0 81 --- pairs() list of handler frames for tracker updates
Nenue@16 82 mod.namedTrackers = {}
Nenue@0 83
Nenue@0 84 --- Handler stubs
Nenue@16 85 mod.AutoQuest = {
Nenue@14 86 name = "AutoQuest",
Nenue@16 87 displayName = "Notice",
Nenue@0 88 }
Nenue@16 89 mod.Quest = {
Nenue@14 90 name = "Quest",
Nenue@14 91 displayName = "Quests",
Nenue@0 92 }
Nenue@16 93 mod.Cheevs = {
Nenue@14 94 name = "Cheevs",
Nenue@14 95 displayName = "Achievements",
Nenue@14 96 }
Nenue@16 97 mod.Bonus = {
Nenue@14 98 name = "Bonus",
Nenue@14 99 displayName = "Bonus Objectives",
Nenue@0 100 }
Nenue@0 101
Nenue@0 102 --- Handler template
Nenue@0 103 local CreateHandler = function (self, name, index)
Nenue@0 104 print(self, name)
Nenue@16 105
Nenue@16 106 local handler = setmetatable(mod[name] or {}, {
Nenue@0 107 __tostring = function() return name end,
Nenue@16 108 __call = function (self) mod.UpdateTracker(self) end
Nenue@0 109 })
Nenue@16 110 if type(mod.orderedHandlers[index]) == 'table' then
Nenue@16 111 return mod.orderedHandlers[index]
Nenue@0 112 end
Nenue@0 113
Nenue@0 114 print('take up locals first')
Nenue@0 115 local preset = {}
Nenue@16 116 for k,v in pairs(mod[name]) do
Nenue@0 117 preset[k] = true
Nenue@0 118 if type(v) == 'table' then
Nenue@0 119 handler[k] = {}
Nenue@0 120 else
Nenue@0 121 handler[k] = v
Nenue@0 122 end
Nenue@0 123 end
Nenue@0 124
Nenue@16 125
Nenue@0 126 print('resulting handler contents')
Nenue@0 127 for k, v in pairs(self) do
Nenue@0 128 if not handler[k] then
Nenue@0 129 if type(v) == 'table' then
Nenue@0 130 -- assume all tables to be local data; don't inherit or ref
Nenue@0 131 handler[k] = {}
Nenue@0 132 else
Nenue@16 133 handler[k] = mod.Tracker[k]
Nenue@0 134 end
Nenue@0 135 else
Nenue@0 136 print(name, 'has its own', k)
Nenue@0 137 end
Nenue@0 138 end
Nenue@0 139 print('|cFFFF4400'..tostring(name)..'|r:')
Nenue@0 140 for k, v in pairs(handler) do
Nenue@16 141 print(format("%24s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v)))
Nenue@0 142 end
Nenue@16 143
Nenue@16 144 mod[name] = handler
Nenue@16 145
Nenue@16 146 mod.orderedHandlers[index] = handler
Nenue@0 147 return true
Nenue@0 148 end
Nenue@0 149
Nenue@16 150 mod.Tracker = setmetatable({}, {
Nenue@0 151 __call = CreateHandler,
Nenue@0 152 __tostring = function() return 'DEFAULT_TRACKING_HANDLER' end
Nenue@0 153 })
Nenue@16 154 local Tracker = mod.Tracker
Nenue@0 155 Tracker.numWatched = 0 --- number of entries being handled
Nenue@0 156 Tracker.numBlocks = 0 --- number of blocks created
Nenue@0 157 Tracker.actualBlocks = 0 --- number of blocks in use
Nenue@0 158
Nenue@0 159 Tracker.freeBlocks = {} --- block heap
Nenue@0 160 Tracker.usedBlocks = {}
Nenue@0 161
Nenue@0 162 Tracker.Watched = {} -- find by watchIndex
Nenue@0 163 Tracker.Info = {} -- find by data ID
Nenue@0 164 Tracker.BlockInfo = {} -- find by block ID
Nenue@16 165 Tracker.WatchInfo = {} -- find data by watch index
Nenue@16 166 Tracker.WatchBlock = {} -- find block by watch index
Nenue@0 167
Nenue@0 168
Nenue@0 169
Nenue@0 170 Tracker.GetBlock = function(handler, blockIndex)
Nenue@0 171 local block = handler.usedBlocks[blockIndex]
Nenue@0 172 if not handler.usedBlocks[blockIndex] then
Nenue@0 173 if #handler.freeBlocks >= 1 then
Nenue@0 174 block = handler.freeBlocks[#handler.freeBlocks]
Nenue@0 175 handler.freeBlocks[#handler.freeBlocks] = nil
Nenue@0 176 else
Nenue@16 177 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, VeneerObjectiveScroll, 'VeneerTrackerBlock')
Nenue@16 178 block.SetStyle = mod.SetBlockStyle
Nenue@14 179 block.Select = handler.Select
Nenue@14 180 block.Open = handler.Open
Nenue@14 181 block.Remove = handler.Remove
Nenue@14 182 block.Link = handler.Link
Nenue@14 183 block:SetScript('OnMouseUp', handler.OnMouseUp)
Nenue@14 184 block:SetScript('OnMouseDown', handler.OnMouseDown)
Nenue@14 185 block:ClearAllPoints()
Nenue@0 186 end
Nenue@0 187
Nenue@0 188 handler.usedBlocks[blockIndex] = block
Nenue@0 189 end
Nenue@0 190 return handler.usedBlocks[blockIndex]
Nenue@0 191 end
Nenue@0 192
Nenue@16 193 function mod:OnInitialize()
Nenue@14 194 self.InitializeWrapper()
Nenue@3 195 self.InitializeXPTracker()
Nenue@16 196 mod.SetEvents()
Nenue@0 197 ObjectiveTrackerFrame:UnregisterAllEvents()
Nenue@0 198 ObjectiveTrackerFrame:Hide()
Nenue@0 199 end