comparison Veneer.lua @ 115:8c94bee4fdfc

- AddHandler simplified - Centralized combat start/stop hooks - WorldState removed
author Nenue
date Tue, 28 Mar 2017 07:02:26 -0400
parents 2105b6e5095f
children 1f68c46bc4de
comparison
equal deleted inserted replaced
114:6748c98a6c6c 115:8c94bee4fdfc
22 Veneer.ConfigMode = true 22 Veneer.ConfigMode = true
23 end 23 end
24 Veneer:UpdateConfigLayers() 24 Veneer:UpdateConfigLayers()
25 end 25 end
26 26
27 Veneer.modules = {}
27 Veneer.Frames = {} 28 Veneer.Frames = {}
28 Veneer.ConfigLayers = {} 29 Veneer.ConfigLayers = {}
29 Veneer.FrameClusters = { 30 Veneer.FrameClusters = {
30 [LE_FREE_FRAMES_GROUP] = {} 31 [LE_FREE_FRAMES_GROUP] = {}
31 } 32 }
92 93
93 function Veneer:OnLoad() 94 function Veneer:OnLoad()
94 print('|cFFFFFF00Veneer!|r') 95 print('|cFFFFFF00Veneer!|r')
95 self:RegisterEvent('ADDON_LOADED') 96 self:RegisterEvent('ADDON_LOADED')
96 self:RegisterEvent('PLAYER_LOGIN') 97 self:RegisterEvent('PLAYER_LOGIN')
98 self:RegisterEvent('PLAYER_REGEN_ENABLED')
99 self:RegisterEvent('PLAYER_REGEN_DISABLED')
97 100
98 self.DEVIAN_PNAME = 'Veneer' 101 self.DEVIAN_PNAME = 'Veneer'
99 self:RegisterForDrag('LeftButton') 102 self:RegisterForDrag('LeftButton')
100 103
101 104
131 if not keepChecking then 134 if not keepChecking then
132 self.AddOnCheck[addon] = nil 135 self.AddOnCheck[addon] = nil
133 end 136 end
134 end 137 end
135 end 138 end
139 elseif event == 'PLAYER_REGEN_ENABLED' then
140 for _, module in pairs(self.modules) do
141 if module:IsShown() and module.hideCombat then
142 module:Hide()
143 end
144 end
145
146 elseif event == 'PLAYER_REGEN_DISABLED' then
147 for _, module in pairs(self.modules) do
148 if module:IsShown() and module.hideCombat then
149 module:Show()
150 end
151 end
136 end 152 end
137 end 153 end
138 154
139 function Veneer:OnDragStart() 155 function Veneer:OnDragStart()
140 self:StartMoving() 156 self:StartMoving()
209 function Veneer:GetClusterFromArgs (...) 225 function Veneer:GetClusterFromArgs (...)
210 return primaryAnchor, clusterTable, insertPosition 226 return primaryAnchor, clusterTable, insertPosition
211 end 227 end
212 228
213 -- args: frame object, list of anchor groups, true for forced top, number for priority layer 229 -- args: frame object, list of anchor groups, true for forced top, number for priority layer
230 local mixins = {}
214 function Veneer:AddHandler(handler, ...) 231 function Veneer:AddHandler(handler, ...)
215 print('|cFFFFFF00*** Adding handler:', handler.moduleName or handler:GetName()) 232 print('|cFFFFFF00'..handler:GetName()..':|r', handler.moduleName, ...)
216 233
217 234 wipe(mixins)
218 for k,v in pairs(VeneerHandlerMixin) do 235 for k,v in pairs(VeneerHandlerMixin) do
219 if not handler[k] then 236 if not handler[k] then
220 print(' * from mixin:', k) 237 tinsert(mixins, k)
221 handler[k] = v 238 handler[k] = v
222 end 239 end
223 end 240 end
241 if #mixins >= 1 then
242 print('* Mixins:|cFF00FF88', table.concat(mixins, ', '))
243 end
244
245 self.modules[handler] = handler
224 246
225 if not handler.anchorFrame then 247 if not handler.anchorFrame then
226 248
227 local primaryAnchor 249 local primaryAnchor = handler.anchorPoint or 'CENTER'
250 local clusterPriority = handler.anchorPriority
251 self.FrameClusters[primaryAnchor] = self.FrameClusters[primaryAnchor] or {}
252 local clusterTable = self.FrameClusters[primaryAnchor]
228 local clusterIndex 253 local clusterIndex
229 local clusterPriority = handler.anchorPriority
230 local clusterDepth = 0
231
232 local clusterTable = self.FrameClusters
233 for i = 1, select('#', ...) do
234 local arg = select(i, ...)
235 local argType = type(arg)
236 if argType == 'string' then
237
238 if not primaryAnchor then
239 primaryAnchor = arg
240 end
241 clusterDepth = clusterDepth + 1
242 clusterTable[arg] = clusterTable[arg] or {}
243 clusterTable = clusterTable[arg]
244 print('clusterGroup =', clusterDepth ..'.'.. arg)
245 elseif argType == 'boolean' then
246 if arg == true then
247 print('anchorFirst =', arg)
248 clusterPriority = nil
249 end
250 elseif argType == 'number' then
251 if arg ~= clusterPriority then
252 print('anchorPriority =', arg)
253 clusterPriority = arg
254 end
255
256 end
257 end
258 254
259 if clusterPriority then 255 if clusterPriority then
260 for i = 1, #clusterTable do 256 for i = 1, #clusterTable do
261 clusterIndex = i 257
262 if clusterTable[i].anchorPriority and (clusterTable[i].anchorPriority > clusterPriority) then 258 if clusterTable[i].anchorPriority and (clusterTable[i].anchorPriority > clusterPriority) then
259 clusterIndex = i
263 print('|cFF00BB00insert position:', clusterPriority, clusterIndex) 260 print('|cFF00BB00insert position:', clusterPriority, clusterIndex)
264 break 261 break
265 else 262 else
266 print('passing lower priority frame:', clusterTable[i]:GetName()) 263 print('pass', clusterTable[i])
264 clusterIndex = i+1
267 end 265 end
268 end 266 end
269 else 267 else
270 print('|cFF00BB00inserting at front') 268 print('|cFF00BB00inserting at front')
271 clusterIndex = 1
272 end
273
274
275 if not primaryAnchor then
276 primaryAnchor = 'CENTER'
277 clusterTable[primaryAnchor] = clusterTable[primaryAnchor] or {}
278 clusterTable = clusterTable[primaryAnchor]
279 end
280
281 if not clusterPriority then
282 clusterIndex = #clusterTable + 1 269 clusterIndex = #clusterTable + 1
283 end 270 end
271
284 if not clusterIndex then 272 if not clusterIndex then
285 clusterIndex = #clusterTable + 1 273 clusterIndex = #clusterTable + 1
286 end 274 end
287 275
288 276
289 tinsert(clusterTable, clusterIndex, handler) 277 tinsert(clusterTable, clusterIndex, handler)
290 print(' cluster', primaryAnchor, 'table', clusterTable, 'priority', clusterPriority, 'position', clusterIndex) 278 print(' cluster', (clusterDepth or 1) .. '.' .. primaryAnchor, clusterTable, 'priority', clusterPriority, 'position', clusterIndex)
291 279
292 handler.anchorCluster = clusterTable 280 handler.anchorCluster = clusterTable
293 handler.anchorIndex = clusterIndex 281 handler.anchorIndex = clusterIndex
294 else 282 else
295 local clusterTable = self.FrameClusters[LE_FREE_FRAMES_GROUP] 283 local clusterTable = self.FrameClusters[LE_FREE_FRAMES_GROUP]
302 if handler.addonTrigger and not IsAddOnLoaded(handler.addonTrigger) then 290 if handler.addonTrigger and not IsAddOnLoaded(handler.addonTrigger) then
303 print('|cFFFF4400 -- dependency:', handler.addonTrigger) 291 print('|cFFFF4400 -- dependency:', handler.addonTrigger)
304 self.AddOnCheck[handler.addonTrigger] = self.AddOnCheck[handler.addonTrigger] or {} 292 self.AddOnCheck[handler.addonTrigger] = self.AddOnCheck[handler.addonTrigger] or {}
305 tinsert(self.AddOnCheck[handler.addonTrigger], handler) 293 tinsert(self.AddOnCheck[handler.addonTrigger], handler)
306 end 294 end
295
307 296
308 if self.initialized then 297 if self.initialized then
309 print(' -- initialization check') 298 print(' -- initialization check')
310 if handler.Setup then 299 if handler.Setup then
311 local doInit = (not handler.initialized) 300 local doInit = (not handler.initialized)
448 VeneerAnimationMixin.OnFinished(frame) 437 VeneerAnimationMixin.OnFinished(frame)
449 end) 438 end)
450 439
451 end 440 end
452 441
453 442 -- execute a function on all clusters in display order
454 function Veneer:ExecuteOnClusters(layer, method) 443 function Veneer:ExecuteOnClusters(layer, method)
455 local print = eprint 444 local print = eprint
456 self.parserDepth = self.parserDepth + 1 445 self.parserDepth = self.parserDepth + 1
457 if not layer then 446 if not layer then
458 if self.parserDepth > 1 then 447 if self.parserDepth > 1 then