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') |
