Mercurial > wow > skeletonkey
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') |