comparison LibKraken/LibKraken.lua @ 62:04c23ceaf9e0

- fix taint caused by loading in combat
author Nenue
date Mon, 05 Sep 2016 14:56:38 -0400
parents 256585077cdd
children
comparison
equal deleted inserted replaced
61:b7be92f62b05 62:04c23ceaf9e0
66 66
67 67
68 local Embed = function (target, template) 68 local Embed = function (target, template)
69 for k,v in pairs(template) do 69 for k,v in pairs(template) do
70 if not target[k] then 70 if not target[k] then
71 print(tostring(target),'<-', k)
71 target[k] = template[k] 72 target[k] = template[k]
72 end 73 end
73 end 74 end
74 end 75 end
75 76
285 end 286 end
286 287
287 288
288 --- default OnEvent 289 --- default OnEvent
289 290
290 local processing = false 291 local EmbedEventScript = function (handler)
292 if not handler.SetScript then
293 return
294 end
295 print('|cFF00FF88binding', handler:GetName())
296 -- enclose so .event can be overridden post-register
297 handler:SetScript('OnEvent', function(self, event,...)
298 print('|cFFFF4400' .. tostring(self) .. '|r', event, ...)
299 print(self.event)
300 print(self[event])
301 self.event(self, event, ...)
302 end)
303 handler.unhandled = 0
304 handler.missed = 0
305 handler.handled = 0
306 handler.firstEvent = false
307 end
308
309
291 local isHandled = false 310 local isHandled = false
292 local nodebug = false 311 local nodebug = false
293 defaultAddon.event = function (addon, event, ...) 312 defaultAddon.event = function (self, event, ...)
294 if processing then 313 print('what')
295 local args = {...}
296 C_Timer.After(0, function() LibKT_OnEvent(addon, event, unpack(args)) end)
297 return
298 else
299
300 end
301 --- reset state 314 --- reset state
302 processing = true 315 if self[event] then
303 isHandled = false 316 print('|cFFFFFF00'.. tostring(self) .. '|r', event)
304 nodebug = false 317 print(self.debug)
305 318 self.debug(event, ...)
306 319 self[event](self, event, ...)
307 if addon.event then 320 self.missed = 0
308 nodebug = addon.event(addon, event, ...) 321 self.handled = self.handled + 1
309 elseif addon[event] then
310 nodebug = addon[event](addon, event, ...) or nodebug
311 addon.missed = 0
312 addon.handled = addon.handled + 1
313 isHandled = true 322 isHandled = true
314 else 323 else
315 addon.firstEvent = false 324 self.firstEvent = false
316 addon.unhandled = addon.unhandled + 1 325 self.unhandled = self.unhandled + 1
317 addon.missed = addon.missed + 1 326 self.missed = self.missed + 1
318 end 327 end
319
320 if addon.modules then
321 for i, module in ipairs(addon.modules) do
322 --print(i, module, event)
323 if module.event then
324 module.event(module, event, ...)
325 elseif module[event] then
326 nodebug = module[event](addon, event, ...) or nodebug
327 addon.missed = 0
328 addon.handled = addon.handled + 1
329 isHandled = true
330 else
331 addon.firstEvent = false
332 addon.unhandled = addon.unhandled + 1
333 addon.missed = addon.missed + 1
334 end
335 end
336 end
337 --if nodebug then
338 processing = false
339 return 328 return
340 --else
341 -- KT.UpdateEventStatus(addon, event, ...)
342 -- processing = false
343 --end
344
345 end 329 end
346 defaultAddon.wrap = function(addon, module, name) 330 defaultAddon.wrap = function(addon, module, name)
347 local moduleName = name or tostring(module) 331 local moduleName = name or tostring(module)
348 print(addon, module) 332 print(addon, module)
349 print('|cFF0088FF'..tostring(addon)..'|r:wrap(|cFF00FFFF'.. moduleName .. '|r|cFFFFFF00)|r') 333 print('|cFF0088FF'..tostring(addon)..'|r:wrap(|cFF00FFFF'.. moduleName .. '|r|cFFFFFF00)|r')
355 if (module.DEVIAN_PNAME and DEVIAN_PNAME == module.DEVIAN_PNAME) or ((not module.DEVIAN_PNAME) and DEVIAN_WORKSPACE) then 339 if (module.DEVIAN_PNAME and DEVIAN_PNAME == module.DEVIAN_PNAME) or ((not module.DEVIAN_PNAME) and DEVIAN_WORKSPACE) then
356 debuggers[module] = function(...) _G.print(moduleName, ...) end 340 debuggers[module] = function(...) _G.print(moduleName, ...) end
357 else 341 else
358 debuggers[module] = noFunc 342 debuggers[module] = noFunc
359 end 343 end
344 module.debug = debuggers[module]
345
346 Embed(module, defaultAddon)
347 EmbedEventScript(module)
348
360 return debuggers[module] 349 return debuggers[module]
361 end 350 end
362 351
363 defaultAddon.GetName = function(self) return tostring(self) end 352 defaultAddon.GetName = function(self) return tostring(self) end
364 end 353 end
406 handler = setmetatable(handler, nmt) 395 handler = setmetatable(handler, nmt)
407 Embed(handler, defaultAddon) 396 Embed(handler, defaultAddon)
408 name = tostring(handler) 397 name = tostring(handler)
409 registeredHandles[handler] = name 398 registeredHandles[handler] = name
410 if handler.SetScript then 399 if handler.SetScript then
411 handler:SetScript('OnEvent', handler.event) 400 handler:SetScript('OnEvent', function(...) handler.event(...) end)
412 end 401 handler.unhandled = 0
413 handler.unhandled = 0 402 handler.missed = 0
414 handler.missed = 0 403 handler.handled = 0
415 handler.handled = 0 404 handler.firstEvent = false
416 handler.firstEvent = false 405 end
417 handler.modules = {} 406 handler.modules = {}
418 tinsert(KT.initStack, handler) 407 tinsert(KT.initStack, handler)
419 408
420 if not noGUI then 409 if not noGUI then
421 handler.UIPanelAnchor = {'TOPLEFT', handler, 'TOPLEFT', 12, -12 } 410 handler.UIPanelAnchor = {'TOPLEFT', handler, 'TOPLEFT', 12, -12 }
431 local debugID = isModule and name or handler 420 local debugID = isModule and name or handler
432 if (handler.DEVIAN_PNAME and DEVIAN_PNAME == handler.DEVIAN_PNAME) or ((not handler.DEVIAN_PNAME) and DEVIAN_WORKSPACE) then 421 if (handler.DEVIAN_PNAME and DEVIAN_PNAME == handler.DEVIAN_PNAME) or ((not handler.DEVIAN_PNAME) and DEVIAN_WORKSPACE) then
433 debuggers[debugID] = debuggers[debugID] or function(...) _G.print(name, ...) end 422 debuggers[debugID] = debuggers[debugID] or function(...) _G.print(name, ...) end
434 debugFunc = debuggers[debugID] 423 debugFunc = debuggers[debugID]
435 end 424 end
425
426 handler.debug = debugFunc
436 --@end-debug@ 427 --@end-debug@
437 return handler, debugFunc 428 return handler, debugFunc
438 end 429 end
439 430
440 KT.handler:RegisterEvent('ADDON_LOADED') 431 KT.handler:RegisterEvent('ADDON_LOADED')