comparison WorldPlan.lua @ 40:589c444d4837

WowAce/Curseforge migration push
author Nenue
date Sun, 25 Dec 2016 13:04:57 -0500
parents 21bcff08b0f4
children 79e5e96e5f18
comparison
equal deleted inserted replaced
39:89ddef0594bc 40:589c444d4837
1 -- WorldPlan.lua 1 -- WorldPlan.lua
2 -- Created: 8/16/2016 8:19 AM 2 -- Created: 8/16/2016 8:19 AM
3 -- %file-revision% 3 -- %file-revision%
4 4 local addonFileName, db = ...
5 WorldPlanCore = { 5 local print = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
6 defaults = {}, 6 local WP_VERSION = "1.0"
7 modules = {}, 7 local tinsert, pairs, floor = tinsert, pairs, floor
8 FilterOptions = {}, 8 local tremove, ipairs, wipe, unpack = tremove, ipairs, wipe, unpack
9 UsedFilters = {}, 9 local select, type, tostring, tonumber = select, type, tostring, tonumber
10 QuestsByZone = {}, 10 local ITEM_QUALITY_COLORS = ITEM_QUALITY_COLORS
11 QuestsByID = {}, 11 local BROKEN_ISLES_ID = 1007
12 TaskQueue = {}, 12 local GetCurrentMapAreaID = GetCurrentMapAreaID
13 } 13 local GetTime, IsLoggedIn = GetTime, IsLoggedIn
14
15 -- Define tables here so the pointers match up
16 WorldPlanCore = { defaults = {}, modules = {}, TaskQueue = {}, }
14 WorldPlanQuestsMixin = { 17 WorldPlanQuestsMixin = {
15 QuestsByZone = {}, 18 UsedPositions = {},
16 QuestsByID = {},
17 freePins = {},
18 } 19 }
19 WorldPlanPOIMixin = {} 20 WorldPlanPOIMixin = {}
20 local print = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end 21 WorldPlanSummaryMixin = {}
21 local WP_VERSION = "1.0" 22 db.filtersDirty = true
22 local tinsert, pairs, floor = table.insert, pairs, floor 23 db.questsDirty = true
23 local ITEM_QUALITY_COLORS = ITEM_QUALITY_COLORS 24 db.OrderedModules = {}
24 local BROKEN_ISLES_ID = 1007 25 db.LoadedModules = {}
25 local GetCurrentMapAreaID, GetMapNameByID, GetSuperTrackedQuestID = GetCurrentMapAreaID, GetMapNameByID, GetSuperTrackedQuestID 26 db.UsedFilters = {}
27 db.QuestsByZone = {}
28 db.QuestsByID = {}
29 db.TasksByID = {}
30 db.FreePins = {}
31 db.UsedPins = {}
32 db.ReportChunks = {}
26 33
27 -- default color templates 34 -- default color templates
28 local DEFAULT_TYPE = { 35 db.DefaultType = {
29 a = 1, 36 a = 1,
30 r = 1, g = 1, b = 1, 37 r = 1, g = 1, b = 1,
31 x = 0, y = 0, 38 x = 0, y = 0,
32 desaturated = true, 39 desaturated = true,
33 pinMask = "Interface\\Minimap\\UI-Minimap-Background", 40 pinMask = "Interface\\Minimap\\UI-Minimap-Background",
34 rewardMask = "Interface\\Minimap\\UI-Minimap-Background", 41 rewardMask = "Interface\\Minimap\\UI-Minimap-Background",
35 texture = "Interface\\BUTTONS\\YELLOWORANGE64", 42 texture = "Interface\\BUTTONS\\YELLOWORANGE64",
36 continent = { 43 continent = {
37 PinSize = 14, 44 iconWidth = 14,
38 Border = 2, 45 borderWidth = 2,
39 highlightWidth = 1, 46 highlightWidth = 1,
40 TagSize = 6, 47 TagSize = 8,
41 maxAlertLevel = 0, 48 maxAlertLevel = 0,
42 showNumber = true, 49 showNumber = true,
43 numberFontObject = 'WorldPlanFont' 50 numberFontObject = 'WorldPlanFont'
44 }, 51 },
45 zone = { 52 zone = {
50 maxAlertLevel = 3, 57 maxAlertLevel = 3,
51 showNumber = true, 58 showNumber = true,
52 numberFontObject = 'WorldPlanNumberFontThin' 59 numberFontObject = 'WorldPlanNumberFontThin'
53 }, 60 },
54 minimized = { 61 minimized = {
55 iconWidth = 6, 62 r = 0, g = 0, b = 0, a = 0.1,
56 borderWidth = 0, 63 iconWidth = 8,
64 borderWidth = 2,
65 alpha = 0.5,
57 highlightWidth = 0, 66 highlightWidth = 0,
58 maxAlertLevel = 1, 67 maxAlertLevel = 0,
59 NoIcon = true, 68 NoIcon = true,
69
70 TagSize = 8,
60 TimeleftStage = 1, 71 TimeleftStage = 1,
61 showNumber = false, 72 showNumber = false,
73 alpha = 0.1,
62 } 74 }
63 } 75 }
64 76
65 77 db.DefaultConfig = {
66
67
68 local defaults = {
69 ShowAllProfessionQuests = false, 78 ShowAllProfessionQuests = false,
70 DisplayContinentSummary = true, 79 DisplayContinentSummary = true,
71 DisplayContinentPins = true, 80 DisplayContinentPins = true,
72 NotifyWhenNewQuests = true, 81 NotifyWhenNewQuests = true,
73 EnablePins = true, 82 EnablePins = true,
74 FadeWhileGrouped = false, 83 FadeWhileGrouped = false,
84 FlightMapAlphaLimits = {1, 1, 1},
85 FlightMapScalingLimits = {1, 3, 1.5},
75 } 86 }
76 87
77 -- operating flags
78 local superTrackedID
79 local currentMapName
80 local hasNewQuestPins
81 local isContinentMap
82 local hasPendingQuestData
83 local notifyPlayed
84 local scanner, wmtt, WorldMapPOIFrame
85 88
86 89
87 -- tracking menu toggler 90 -- tracking menu toggler
88 local DropDown_OnClick = function(self) 91 local DropDown_OnClick = function(self)
89 local key = self.value 92 local key = self.value
95 end 98 end
96 end 99 end
97 _G.WorldPlan:Refresh() 100 _G.WorldPlan:Refresh()
98 end 101 end
99 102
100 function WorldPlanCore:print(...) 103 function db.print(...)
101 local msg
102 for i = 1, select('#', ...) do 104 for i = 1, select('#', ...) do
103 msg = (msg and (msg .. ' ') or '') .. tostring(select(i, ...)) 105 tinsert(db.ReportChunks, tostring(select(i, ...)))
104 end 106 end
105 DEFAULT_CHAT_FRAME:AddMessage("|cFF0088FFWorldPlan|r: " .. msg) 107 end
106 end 108
107 109 function WorldPlanCore:print(...) db.print(...) end
108 local current_type_owner 110
109 function WorldPlanCore:AddHandler (frame, defaults) 111 function WorldPlanCore:AddHandler (frame)
110 print('|cFFFFFF00'..self:GetName()..':AddHandler()', frame:GetName()) 112 if not db.LoadedModules[frame] then
111 tinsert(self.modules, frame) 113 print('|cFFFFFF00'..self:GetName()..':AddHandler()', frame:GetName(), self.initialized)
112 self.defaults[frame] = defaults 114 db.LoadedModules[frame] = true
113 frame.GetTypeInfo = function(frame, typeID) 115 tinsert(db.OrderedModules, frame)
114 return self:GetTypeInfo(frame, typeID) 116
117 if frame.defaults then
118 db.DefaultConfig[frame:GetName()] = frame.defaults
119 end
120
121 frame.GetTypeInfo = function(frame, typeID)
122 return self:GetTypeInfo(frame, typeID)
123 end
124
125 frame.owningFrame = self
126 else
127
128 print('|cFFFF4400'..self:GetName()..':AddHandler()', frame:GetName())
115 end 129 end
116 end 130 end
117 131
118 function WorldPlanCore:OnLoad () 132 function WorldPlanCore:OnLoad ()
119 133
122 if type(v) == 'table' then 136 if type(v) == 'table' then
123 print('adding owner', k) 137 print('adding owner', k)
124 v = setmetatable(v, { 138 v = setmetatable(v, {
125 __newindex = function(t2,k2,v2) 139 __newindex = function(t2,k2,v2)
126 if type(v2) == 'table' then 140 if type(v2) == 'table' then
127 print('adding type', k2) 141 --print('adding type', k2)
128 v2 = setmetatable(v2, {__index = function(t3,k3) 142 v2 = setmetatable(v2, {__index = function(t3,k3)
129 --print('##deferring to default key', k3) 143 --print('##deferring to default key', k3)
130 return DEFAULT_TYPE[k3] 144 return db.DefaultType[k3]
131 end}) 145 end})
132 end 146 end
133 rawset(t2,k2,v2) 147 rawset(t2,k2,v2)
134 end}) 148 end})
135 end 149 end
142 for index, color in pairs(ITEM_QUALITY_COLORS) do 156 for index, color in pairs(ITEM_QUALITY_COLORS) do
143 self:AddTypeInfo(self, index, { r = color.r, g = color.g, b = color.b, hex = color.hex, }) 157 self:AddTypeInfo(self, index, { r = color.r, g = color.g, b = color.b, hex = color.hex, })
144 end 158 end
145 159
146 160
147 WorldPlanCore:print('v'..WP_VERSION) 161 db.print('v'..WP_VERSION)
162
148 163
149 self:RegisterEvent("QUESTLINE_UPDATE") 164 self:RegisterEvent("QUESTLINE_UPDATE")
150 self:RegisterEvent("QUEST_LOG_UPDATE") 165 self:RegisterEvent("QUEST_LOG_UPDATE")
151 self:RegisterEvent("WORLD_MAP_UPDATE") 166 self:RegisterEvent("WORLD_MAP_UPDATE")
167 self:RegisterEvent("SPELLS_CHANGED")
168 self:RegisterEvent('PLAYER_ENTERING_WORLD')
152 self:RegisterEvent("WORLD_QUEST_COMPLETED_BY_SPELL") 169 self:RegisterEvent("WORLD_QUEST_COMPLETED_BY_SPELL")
153 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED") 170 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED")
154 self:RegisterEvent("SKILL_LINES_CHANGED") 171 self:RegisterEvent("SKILL_LINES_CHANGED")
155 self:RegisterEvent("ARTIFACT_XP_UPDATE") 172 self:RegisterEvent("ARTIFACT_XP_UPDATE")
156 self:RegisterEvent("ADDON_LOADED") 173 self:RegisterEvent("ADDON_LOADED")
157 self:SetParent(WorldMapFrame) 174 self:RegisterEvent("PLAYER_LOGIN")
175 --self:SetParent(WorldMapFrame)
158 end 176 end
159 177
160 function WorldPlanCore:OnShow() 178 function WorldPlanCore:OnShow()
161 print(self:GetName()..':OnShow()') 179 --print(self:GetName()..':OnShow()')
162 if self.isStale then 180 --hooksecurefunc(self, 'SetScript', function(...) self:print('|cFFFFFF00'..self:GetName()..':SetScript()|r', ...) end)
163 self:Refresh() 181 end
164 end 182
165 183 function WorldPlanCore:GetMapInfo()
166 hooksecurefunc(self, 'SetScript', function(...) self:print('|cFFFFFF00'..self:GetName()..':SetScript()|r', ...) end) 184
167 end 185 db.currentMapID = GetCurrentMapAreaID()
186 db.isContinentMap = (db.currentMapID == BROKEN_ISLES_ID)
187 db.useContinentType = (WorldMapDetailFrame:GetScale() < 1)
188
189 end
190
168 191
169 function WorldPlanCore:OnEvent (event, ...) 192 function WorldPlanCore:OnEvent (event, ...)
170 print() 193
171 print(event, 'init:', self.initialized) 194 print('|cFF00FF88'..self:GetName().. ':OnEvent()|r', event, GetTime(), 'init:', self.initialized)
172 if event == 'ADDON_LOADED' then 195 if event == 'ADDON_LOADED' then
173 196
174 if IsLoggedIn() and not self.initialized then 197 if IsLoggedIn() and not self.initialized then
175 self:Setup() 198 self:Setup()
176 end 199 end
177 else 200 else
178 if event == 'WORLD_MAP_UPDATE' then 201 if (event == 'WORLD_MAP_UPDATE') or (event == 'PLAYER_ENTERING_WORLD') then
179 self.currentMapID = GetCurrentMapAreaID() 202 print('|cFFFF4400currentMapID =', db.currentMapID, ...)
180 self.isContinentMap = (self.currentMapID == BROKEN_ISLES_ID) 203 self:GetMapInfo()
181 --self:print('|cFFFF4400currentMapID =', self.currentMapID) 204 end
182 self.isStale = true 205
183 end 206 for i, module in ipairs(db.OrderedModules) do
184
185 for i, module in ipairs(self.modules) do
186 if module.OnEvent then 207 if module.OnEvent then
187 print(' |cFF0088FF'..module:GetName() .. ':OnEvent()|r') 208 print(' |cFF00FFFF'..module:GetName() .. ':OnEvent()|r')
188 module:OnEvent(event, ...) 209 module:OnEvent(event, ...)
189 end 210 end
190 end 211 end
191 end 212 end
192 end 213 end
204 --self:print('|cFF00FF00running scheduled task #', #self.TaskQueue) 225 --self:print('|cFF00FF00running scheduled task #', #self.TaskQueue)
205 func() 226 func()
206 end 227 end
207 228
208 if self.isStale then 229 if self.isStale then
209 print('|cFF00FF00pushing global update') 230 -- these need to happen in load order
210 self.isStale = nil 231 for i, module in ipairs(db.OrderedModules) do
211 self:Refresh() 232 if module:IsVisible() and module.isStale then
212 else
213 for i, module in ipairs(self.modules) do
214 if module.isStale then
215 print('|cFF00FF00internal '..module:GetName()..':Refresh()|r') 233 print('|cFF00FF00internal '..module:GetName()..':Refresh()|r')
216 module:Refresh() 234 module:Refresh()
217 end 235 end
218 end 236 end
219 end 237 self.isStale = nil
238 end
239
240 if #db.ReportChunks >= 1 then
241
242 DEFAULT_CHAT_FRAME:AddMessage("|cFF0088FF"..addonFileName.."|r: " .. table.concat(db.ReportChunks, ', '))
243 wipe(db.ReportChunks)
244 end
245
220 end 246 end
221 247
222 function WorldPlanCore:Setup () 248 function WorldPlanCore:Setup ()
249 print('|cFFFFFF00'..self:GetName()..':Setup()|r')
250
223 if not WorldPlanData then 251 if not WorldPlanData then
224 WorldPlanData = {key = 0 } 252 WorldPlanData = {key = 0}
225 end 253 end
226 WorldPlanData.key = (WorldPlanData.key or 0) + 1 254 WorldPlanData.key = (WorldPlanData.key or 0) + 1
227 self.db = WorldPlanData 255 db.Config = WorldPlanData
228 self.db.WorldQuests = self.db.WorldQuests or {} 256 for k,v in pairs(db.DefaultConfig) do
229 db = self.db
230 for k,v in pairs(defaults) do
231 --[===[@non-debug@ 257 --[===[@non-debug@
232 if not db[k] then 258 if not db.Config[k] then
233 db[k] = v 259 db.Config[k] = v
234 end 260 end
235 261
236 --@end-non-debug@]===] 262 --@end-non-debug@]===]
237 --@debug@ 263 --@debug@
238 db[k] = v 264 db.Config[k] = v
239 --@end-debug@ 265 --@end-debug@
240 end 266 end
241 267
242 self.currentMapID = GetCurrentMapAreaID() 268
243 269 db.currentMapID = GetCurrentMapAreaID()
244 for i, module in ipairs(self.modules) do 270
245 module.db = self.db 271 for i, module in ipairs(db.OrderedModules) do
272 db.Config[module:GetName()] = db.Config[module:GetName()] or {}
246 if module.Setup then module:Setup() end 273 if module.Setup then module:Setup() end
247 if not module.RegisterEvent then 274 if not module.RegisterEvent then
248 module.RegisterEvent = self.RegisterEvent 275 module.RegisterEvent = self.RegisterEvent
249 end 276 end
250 end 277 end
278
279
251 self.initialized = true 280 self.initialized = true
252 281
253 hooksecurefunc("UIDropDownMenu_Initialize", self.OnDropDownInitialize) 282 hooksecurefunc("UIDropDownMenu_Initialize", self.OnDropDownInitialize)
254 283
255 hooksecurefunc("WorldMapTrackingOptionsDropDown_OnClick", function(button) 284 hooksecurefunc("WorldMapTrackingOptionsDropDown_OnClick", function(button)
259 value == "worldQuestFilterProfessionMaterials" or value == "worldQuestFilterGold" or 288 value == "worldQuestFilterProfessionMaterials" or value == "worldQuestFilterGold" or
260 value == "worldQuestFilterEquipment") then 289 value == "worldQuestFilterEquipment") then
261 self:Refresh(true) 290 self:Refresh(true)
262 end 291 end
263 end) 292 end)
264 end 293
265 294
295 hooksecurefunc("WorldMapFrame_Update", function()
296 print('|cFFFF4400WorldMapFrame_Update|r')
297 self:GetMapInfo()
298 end)
299
300
301 SLASH_WORLDPLAN1 = "/worldplan"
302 SLASH_WORLDPLAN2 = "/wp"
303
304
305
306 SlashCmdList.WORLDPLAN = function(args)
307 local arg1, arg2, extraArgs = args:match("(%S+)%s*(%S*)%s*(.*)")
308
309 if arg1 == 'wq' then
310 if arg2 and WorldPlanQuests[arg2] then
311 self:print('WorldPlanQuests:'..arg2..'()')
312 WorldPlanQuests[arg2](WorldPlanQuests)
313 elseif arg2 == 'flightscale' and extraArgs then
314 local val1, val2, val3 = extraArgs:match("(%S+)%s*(%S*)%s*(%S*)")
315 if tonumber(val1) and tonumber(val2) and tonumber(val3) then
316 db.Config.FlightMapScalingLimits = {tonumber(val1), tonumber(val2), tonumber(val3)}
317 self:print('FlightMapFrame scaling limits updated:', unpack(db.Config.FlightMapScalingLimits))
318 else
319 self:print('FlightMapFrame scaling limits:', unpack(db.Config.FlightMapScalingLimits))
320 end
321 elseif arg2 == 'flightalpha' and extraArgs then
322 local val1, val2, val3 = extraArgs:match("(%S+)%s*(%S*)%s*(%S*)")
323 if tonumber(val1) and tonumber(val2) and tonumber(val3) then
324 db.Config.FlightMapAlphaLimits = {tonumber(val1), tonumber(val2), tonumber(val3)}
325 self:print('FlightMapFrame alpha limits updated:', unpack(db.Config.FlightMapAlphaLimits))
326 else
327 self:print('FlightMapFrame alpha limits:', unpack(db.Config.FlightMapAlphaLimits))
328 end
329 else
330
331 self:print('WorldPlanQuests:Refresh(true)')
332 WorldPlanQuests:Refresh(true)
333 end
334 elseif arg1 == 'filter' then
335 if arg2 and WorldPlanSummary[arg2] then
336 self:print('WorldPlanSummary:'..arg2..'()')
337 WorldPlanSummary[arg2](WorldPlanSummary)
338 else
339 self:print('WorldPlanSummary:Refresh(true)')
340 WorldPlanSummary:Refresh(true)
341 end
342 else
343 self:print('Refreshing data.')
344 self:Refresh(true)
345 end
346
347 end
348 end
349
350 -- registers a template table
266 function WorldPlanCore:AddTypeInfo(owner, id, info) 351 function WorldPlanCore:AddTypeInfo(owner, id, info)
267 self.Types[owner] = self.Types[owner] or {} 352 self.Types[owner] = self.Types[owner] or {}
268 self.Types[owner][id] = info 353 self.Types[owner][id] = info
269 print('Type('..owner:GetName()..')('..id..') = '.. tostring(info)) 354 print('Type('..owner:GetName()..')('..id..') = '.. tostring(info))
270 end 355 end
271 356
357 -- recall a template table, with situational details filled in
272 function WorldPlanCore:GetTypeInfo(owner, typeID) 358 function WorldPlanCore:GetTypeInfo(owner, typeID)
273 local info, extraInfo 359 local info, extraInfo
274 if not owner then 360 if not owner then
275 --print('## deferring to default type list') 361 --print('## deferring to default type list')
276 else 362 else
278 end 364 end
279 365
280 owner = owner or self 366 owner = owner or self
281 if (not typeID) or (not self.Types[owner][typeID]) then 367 if (not typeID) or (not self.Types[owner][typeID]) then
282 --print('## sending list default') 368 --print('## sending list default')
283 info = DEFAULT_TYPE 369 info = db.DefaultType
284 else 370 else
285 --print('## sent list definition', typeID) 371 --print('## sent list definition', typeID)
286 info = self.Types[owner][typeID] 372 info = self.Types[owner][typeID]
287 end 373 end
288 374
289 if isContinentMap then 375 local subType = 'continent'
290 extraInfo = info.continent 376 if (
291 --print('### continent subtype', extraInfo) 377 FlightMapFrame
292 else 378 and FlightMapFrame:IsVisible()
293 extraInfo = info.zone 379 and FlightMapFrame:IsZoomedIn()
294 380 ) or (
295 --print('### zone subtype', extraInfo) 381 not db.isContinentMap
296 end 382 ) or (
297 return info, extraInfo 383 db.useContinentType == false
384 ) then
385 subType = 'zone'
386 end
387
388 return info, info[subType] or db.DefaultType[subType]
298 end 389 end
299 390
300 do 391 do
301 local timeStates = { 392 local timeStates = {
302 {maxSeconds = 60, 393 {maxSeconds = 60,
312 r=0, g=1, b=0, 403 r=0, g=1, b=0,
313 }, -- 7 days + 1 minute 404 }, -- 7 days + 1 minute
314 } 405 }
315 -- Generates a timeleft string 406 -- Generates a timeleft string
316 function WorldPlanCore:GetTimeInfo(timeLeft, limit) 407 function WorldPlanCore:GetTimeInfo(timeLeft, limit)
317 limit = limit or #timeStates
318 for index = 1, limit do 408 for index = 1, limit do
319 local state = timeStates[index] 409 local state = timeStates[index]
320 if timeLeft <= state.maxSeconds then 410 if timeLeft <= state.maxSeconds then
321 local text 411 local text
322 if state.format then 412 if state.format then
333 print('|cFFFFFF00'..self:GetName()..':Refresh()|r forced:', forced, 'init:', self.initialized) 423 print('|cFFFFFF00'..self:GetName()..':Refresh()|r forced:', forced, 'init:', self.initialized)
334 if not self.initialized then 424 if not self.initialized then
335 return 425 return
336 end 426 end
337 427
338 for i, module in ipairs(self.modules) do 428 for i, module in ipairs(db.OrderedModules) do
339 if module.Refresh then 429 if module.Refresh then
340 print('|cFF00FF00external '..module:GetName()..':Refresh()|r') 430 print('|cFF00FF00external '..module:GetName()..':Refresh()|r')
341 module:Refresh(forced) 431 module:Refresh(forced)
342 end 432 end
343 end 433 end
434
435 self.isStale = nil
344 end 436 end
345 437
346 -- insert visual options into the tracking button menu 438 -- insert visual options into the tracking button menu
347 WorldPlanCore.OnDropDownInitialize = function (self, callback, dropType) 439 WorldPlanCore.OnDropDownInitialize = function (self, callback, dropType)
348 if self ~= WorldMapFrameDropDown then 440 if self ~= WorldMapFrameDropDown then
349 return 441 return
350 end 442 end
351 local db = WorldPlan.db 443 local config = WorldPlanData
352
353 local info = UIDropDownMenu_CreateInfo() 444 local info = UIDropDownMenu_CreateInfo()
354 info.text = "" 445 info.text = ""
355 info.isTitle = true 446 info.isTitle = true
356 UIDropDownMenu_AddButton(info) 447 UIDropDownMenu_AddButton(info)
357 info.text = "|cFF00AAFFWorldPlan|r" 448 info.text = "|cFF00AAFFWorldPlan|r"
363 info.tooltipOnButton = 1 454 info.tooltipOnButton = 1
364 455
365 info.text = "Enable" 456 info.text = "Enable"
366 info.isNotRadio = true 457 info.isNotRadio = true
367 info.value = "EnablePins" 458 info.value = "EnablePins"
368 info.checked = db.EnablePins 459 info.checked = config.EnablePins
369 info.tooltipTitle = "Enable World Quest Overlays" 460 info.tooltipTitle = "Enable World Quest Overlays"
370 info.tooltipText = "Toggle the detail layers here." 461 info.tooltipText = "Toggle the detail layers here."
371 info.func = DropDown_OnClick 462 info.func = DropDown_OnClick
372 UIDropDownMenu_AddButton(info) 463 UIDropDownMenu_AddButton(info)
373 464
374 info.text = "Display All Profession Quests" 465 info.text = "Display All Profession Quests"
375 info.isNotRadio = true 466 info.isNotRadio = true
376 info.value = "ShowAllProfessionQuests" 467 info.value = "ShowAllProfessionQuests"
377 info.checked = db.ShowAllProfessionQuests 468 info.checked = config.ShowAllProfessionQuests
378 info.tooltipTitle = "Hidden Quests" 469 info.tooltipTitle = "Hidden Quests"
379 info.tooltipText = "Display work order and profession-related quests that are skipped by the default UI." 470 info.tooltipText = "Display work order and profession-related quests that are skipped by the default UI."
380 info.func = DropDown_OnClick 471 info.func = DropDown_OnClick
381 UIDropDownMenu_AddButton(info) 472 UIDropDownMenu_AddButton(info)
382 473
383 info.text = "Show Continent Pins" 474 info.text = "Show Continent Pins"
384 info.isNotRadio = true 475 info.isNotRadio = true
385 info.value = "DisplayContinentPins" 476 info.value = "DisplayContinentPins"
386 info.checked = db.DisplayContinentPins 477 info.checked = config.DisplayContinentPins
387 info.tooltipTitle = "Continent Pins" 478 info.tooltipTitle = "Continent Pins"
388 info.tooltipText = "Display quest pins on the continent map (may get cramped)." 479 info.tooltipText = "Display quest pins on the continent map (may get cramped)."
389 info.func = DropDown_OnClick 480 info.func = DropDown_OnClick
390 UIDropDownMenu_AddButton(info) 481 UIDropDownMenu_AddButton(info)
391 482
392 info.text = "Show Summary" 483 info.text = "Show Summary"
393 info.isNotRadio = true 484 info.isNotRadio = true
394 info.value = "DisplayContinentSummary" 485 info.value = "DisplayContinentSummary"
395 info.tooltipTitle = "Summary Bar" 486 info.tooltipTitle = "Summary Bar"
396 info.tooltipText = "Display a summary of active world quests. Note: requires directly viewing Broken Isle and Dalaran maps to gain complete info." 487 info.tooltipText = "Display a summary of active world quests. Note: requires directly viewing Broken Isle and Dalaran maps to gain complete info."
397 info.checked = db.DisplayContinentSummary 488 info.checked = config.DisplayContinentSummary
398 info.func = DropDown_OnClick 489 info.func = DropDown_OnClick
399 UIDropDownMenu_AddButton(info) 490 UIDropDownMenu_AddButton(info)
400 491
401 info.text = "Fade In Groups" 492
493 info.text = "Nudge Pins"
494 info.isNotRadio = true
495 info.value = "NudgePins"
496 info.tooltipTitle = "Pin Nudging"
497 info.tooltipText = "Adjust the position of quest pins that overlap."
498 info.checked = config.NudgePins
499 info.func = DropDown_OnClick
500 UIDropDownMenu_AddButton(info)
501
502 info.text = "Fade Whiled Grouped"
402 info.isNotRadio = true 503 info.isNotRadio = true
403 info.value = "FadeWhileGrouped" 504 info.value = "FadeWhileGrouped"
404 info.tooltipTitle = "Group Fade" 505 info.tooltipTitle = "Group Fade"
405 info.tooltipText = "Reduce pin alpha when grouped, so player dots are easier to see." 506 info.tooltipText = "Reduce pin alpha when grouped, so player dots are easier to see."
406 info.checked = db.FadeWhileGrouped 507 info.checked = config.FadeWhileGrouped
407 info.func = DropDown_OnClick 508 info.func = DropDown_OnClick
408 UIDropDownMenu_AddButton(info) 509 UIDropDownMenu_AddButton(info)
409 end 510 end
410 511
411 -------------------------------------------------------------------------------------------------------------------- 512 --------------------------------------------------------------------------------------------------------------------
415 516
416 517
417 518
418 519
419 520
420 SLASH_WORLDPLAN1 = "/worldplan"
421 SLASH_WORLDPLAN2 = "/wp"
422 SlashCmdList.WORLDPLAN = function()
423 print('command pop')
424 WorldPlanCore:GetPinsForMap()
425 WorldPlanCore:RefreshPins()
426
427 SetTimedCallbackForAllPins(0, function(self) self.FadeIn:Play() self.FlashIn:Play() end)
428 SetTimedCallbackForAllPins(5, function(self) self.PendingFade:Play() end)
429 SetTimedCallbackForAllPins(8, function(self) self.PendingFade:Stop() end)
430 end
431 --%end-debug% 521 --%end-debug%