From 275d54726d205164da221293a02b9137f689fa3e Mon Sep 17 00:00:00 2001 From: Tjakka5 Date: Sat, 18 Jan 2020 19:26:38 +0100 Subject: [PATCH] Allow emits within emits --- concord/world.lua | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/concord/world.lua b/concord/world.lua index e196300..7708bb6 100644 --- a/concord/world.lua +++ b/concord/world.lua @@ -25,7 +25,8 @@ function World.new() __entities = List(), __systems = List(), - __events = {}, + __events = {}, + __emitSDepth = 0, __added = List(), __backAdded = List(), __removed = List(), __backRemoved = List(), @@ -245,6 +246,8 @@ function World:emit(functionName, ...) error("bad argument #1 to 'World:emit' (String expected, got "..type(functionName)..")") end + self.__emitSDepth = self.__emitSDepth + 1 + local listeners = self.__events[functionName] if listeners then @@ -252,13 +255,17 @@ function World:emit(functionName, ...) local listener = listeners[i] if (listener.system.__enabled) then - self:__flush() + if (self.__emitSDepth == 0) then + self:__flush() + end listener.callback(listener.system, ...) end end end + self.__emitSDepth = self.__emitSDepth - 1 + return self end