From b0fdb74d8257c036adb5e925a593effbc9b4a5ad Mon Sep 17 00:00:00 2001 From: flamendless Date: Thu, 4 Nov 2021 13:13:11 +0800 Subject: [PATCH] Fixed beforeEmit/afterEmit to handle recursive/nested emits; --- concord/world.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/concord/world.lua b/concord/world.lua index 52e8657..bbaae21 100644 --- a/concord/world.lua +++ b/concord/world.lua @@ -50,6 +50,8 @@ function World.new() __systemLookup = {}, __isWorld = true, + + __ignoreEmits = false }, World.__mt) -- Optimization: We deep copy the World class into our instance of a world. @@ -320,8 +322,10 @@ function World:emit(functionName, ...) local listeners = self.__events[functionName] - if Type.isCallable(self.beforeEmit) then + if not self.__ignoreEmits and Type.isCallable(self.beforeEmit) then + self.__ignoreEmits = true self:beforeEmit(functionName, listeners, ...) + self.__ignoreEmits = false end if listeners then @@ -338,8 +342,10 @@ function World:emit(functionName, ...) end end - if Type.isCallable(self.afterEmit) then + if not self.__ignoreEmits and Type.isCallable(self.afterEmit) then + self.__ignoreEmits = true self:afterEmit(functionName, listeners, ...) + self.__ignoreEmits = false end self.__emitSDepth = self.__emitSDepth - 1