diff --git a/src/lua/LuaScriptInterface.cpp b/src/lua/LuaScriptInterface.cpp index 2b77e3ed9..d3cb07b7b 100644 --- a/src/lua/LuaScriptInterface.cpp +++ b/src/lua/LuaScriptInterface.cpp @@ -405,12 +405,11 @@ bool CommandInterface::HandleEvent(const GameControllerEvent &event) { auto *lsi = static_cast(this); auto *L = lsi->L; - assert(!lsi->currentEventHandlerIt); auto eventType = int(event.index()); auto &list = lsi->gameControllerEventHandlers[eventType]; auto it = list.begin(); auto end = list.end(); - lsi->currentEventHandlerIt = ⁢ + lsi->currentEventHandlerIts.push_back(&it); bool cont = true; while (it != end) { @@ -441,7 +440,8 @@ bool CommandInterface::HandleEvent(const GameControllerEvent &event) } lua_pop(L, 1); } - lsi->currentEventHandlerIt = nullptr; + assert(lsi->currentEventHandlerIts.back() == &it); + lsi->currentEventHandlerIts.pop_back(); return cont; } @@ -463,9 +463,12 @@ void LuaScriptInterface::RemoveEventHandler(int eventType, int stackIndex) lua_pop(L, 1); if (equal) { - if (currentEventHandlerIt && *currentEventHandlerIt == it) + for (auto currentEventHandlerIt : currentEventHandlerIts) { - ++*currentEventHandlerIt; + if (*currentEventHandlerIt == it) + { + ++*currentEventHandlerIt; + } } list.erase(it); break; diff --git a/src/lua/LuaScriptInterface.h b/src/lua/LuaScriptInterface.h index 5d78522b7..33bc5c36b 100644 --- a/src/lua/LuaScriptInterface.h +++ b/src/lua/LuaScriptInterface.h @@ -9,6 +9,7 @@ #include #include #include +#include namespace http { @@ -108,7 +109,7 @@ public: private: std::vector> gameControllerEventHandlers; // must come after luaState - std::list::iterator *currentEventHandlerIt = nullptr; + std::deque::iterator *> currentEventHandlerIts; public: void AddEventHandler(int eventType, int stackIndex);