diff 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
line wrap: on
line diff
--- a/LibKraken/LibKraken.lua	Sun Aug 28 10:06:59 2016 -0400
+++ b/LibKraken/LibKraken.lua	Mon Sep 05 14:56:38 2016 -0400
@@ -68,6 +68,7 @@
 local Embed = function (target, template)
   for k,v in pairs(template) do
     if not target[k] then
+      print(tostring(target),'<-', k)
       target[k] = template[k]
     end
   end
@@ -287,61 +288,44 @@
 
 --- default OnEvent
 
-  local processing = false
+  local EmbedEventScript = function (handler)
+    if not handler.SetScript then
+       return
+    end
+    print('|cFF00FF88binding', handler:GetName())
+    -- enclose so .event can be overridden post-register
+    handler:SetScript('OnEvent', function(self, event,...)
+      print('|cFFFF4400' .. tostring(self) .. '|r', event, ...)
+      print(self.event)
+      print(self[event])
+      self.event(self, event, ...)
+    end)
+    handler.unhandled = 0
+    handler.missed = 0
+    handler.handled = 0
+    handler.firstEvent = false
+  end
+
+
   local isHandled = false
   local nodebug = false
-  defaultAddon.event = function (addon, event, ...)
-    if processing then
-      local args = {...}
-      C_Timer.After(0, function() LibKT_OnEvent(addon, event, unpack(args)) end)
-      return
-    else
-
-    end
+  defaultAddon.event = function (self, event, ...)
+    print('what')
     --- reset state
-    processing = true
-    isHandled = false
-    nodebug = false
-
-
-    if addon.event then
-      nodebug = addon.event(addon, event, ...)
-    elseif addon[event] then
-      nodebug = addon[event](addon, event, ...) or nodebug
-      addon.missed = 0
-      addon.handled = addon.handled + 1
+    if self[event] then
+      print('|cFFFFFF00'.. tostring(self) .. '|r', event)
+      print(self.debug)
+      self.debug(event, ...)
+      self[event](self, event, ...)
+      self.missed = 0
+      self.handled = self.handled + 1
       isHandled = true
     else
-      addon.firstEvent = false
-      addon.unhandled = addon.unhandled + 1
-      addon.missed = addon.missed + 1
+      self.firstEvent = false
+      self.unhandled = self.unhandled + 1
+      self.missed = self.missed + 1
     end
-
-    if addon.modules then
-      for i, module in ipairs(addon.modules) do
-        --print(i, module, event)
-        if module.event then
-          module.event(module, event, ...)
-        elseif module[event] then
-          nodebug = module[event](addon, event, ...) or nodebug
-          addon.missed = 0
-          addon.handled = addon.handled + 1
-          isHandled = true
-        else
-          addon.firstEvent = false
-          addon.unhandled = addon.unhandled + 1
-          addon.missed = addon.missed + 1
-        end
-      end
-    end
-    --if nodebug then
-    processing = false
     return
-    --else
-    --  KT.UpdateEventStatus(addon, event, ...)
-    --  processing = false
-    --end
-
   end
   defaultAddon.wrap = function(addon, module, name)
     local moduleName = name or tostring(module)
@@ -357,6 +341,11 @@
     else
       debuggers[module] = noFunc
     end
+    module.debug = debuggers[module]
+
+    Embed(module, defaultAddon)
+    EmbedEventScript(module)
+
     return debuggers[module]
   end
 
@@ -408,12 +397,12 @@
     name = tostring(handler)
     registeredHandles[handler] = name
     if handler.SetScript then
-      handler:SetScript('OnEvent', handler.event)
+      handler:SetScript('OnEvent', function(...) handler.event(...) end)
+      handler.unhandled = 0
+      handler.missed = 0
+      handler.handled = 0
+      handler.firstEvent = false
     end
-    handler.unhandled = 0
-    handler.missed = 0
-    handler.handled = 0
-    handler.firstEvent = false
     handler.modules = {}
     tinsert(KT.initStack, handler)
 
@@ -433,6 +422,8 @@
     debuggers[debugID] = debuggers[debugID] or function(...) _G.print(name, ...) end
     debugFunc = debuggers[debugID]
   end
+
+  handler.debug = debugFunc
   --@end-debug@
   return handler, debugFunc
 end