From f05c048f6dff9565e4cf2685b3c3b5451d43b406 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Mon, 29 Aug 2011 16:35:58 -0300 Subject: [PATCH] straightforward signal and slots system for lua events --- modules/console/console.lua | 2 +- modules/core/util.lua | 15 ++++++++++++++- modules/game/game.lua | 3 +++ src/framework/luascript/luainterface.cpp | 23 +++++++++++++++++------ src/otclient/core/game.cpp | 12 +++++++----- 5 files changed, 42 insertions(+), 13 deletions(-) diff --git a/modules/console/console.lua b/modules/console/console.lua index dc88cba4..73eb0d0c 100644 --- a/modules/console/console.lua +++ b/modules/console/console.lua @@ -67,7 +67,7 @@ end function Console.init() consoleWidget = UI.loadAndDisplay("/console/console.otui") consoleWidget:hide() - consoleWidget.onKeyPress = onKeyPress + connect(consoleWidget, { onKeyPress = onKeyPress }) commandLineEdit = consoleWidget:getChildById('commandLineEdit') consoleBuffer = consoleWidget:getChildById('consoleBuffer') diff --git a/modules/core/util.lua b/modules/core/util.lua index 58d75fb2..bc60c00b 100644 --- a/modules/core/util.lua +++ b/modules/core/util.lua @@ -10,4 +10,17 @@ function createEnvironment() local env = { } setmetatable(env, { __index = _G} ) return env -end \ No newline at end of file +end + +function connect(object, signalsAndSlots) + for signal,slot in pairs(signalsAndSlots) do + if not object[signal] then + object[signal] = slot + elseif type(object[signal]) == 'function' then + object[signal] = { object[signal], slot } + elseif type(signal) == 'table' then + table.insert(object[signal], slot) + else + end + end +end diff --git a/modules/game/game.lua b/modules/game/game.lua index 5b2219e9..71759ee5 100644 --- a/modules/game/game.lua +++ b/modules/game/game.lua @@ -7,6 +7,9 @@ local function onGameKeyPress(self, keyCode, keyChar, keyboardModifiers) if keyCode == KeyG then CharacterList.show() return true + elseif keyCode == KeyQ then + Game.logout() + return true end end return false diff --git a/src/framework/luascript/luainterface.cpp b/src/framework/luascript/luainterface.cpp index 00c4eba8..a5737756 100644 --- a/src/framework/luascript/luainterface.cpp +++ b/src/framework/luascript/luainterface.cpp @@ -419,21 +419,32 @@ int LuaInterface::protectedCall(int numArgs, int requestedResults) else if(isTable(funcIndex)) { // loop through table values pushNil(); + bool done = false; while(next(funcIndex-1)) { if(isFunction()) { // repush arguments for(int i=0;idisconnect(); + m_protocolGame.reset(); + } } }