diff options
Diffstat (limited to 'engines/sword25/input/inputengine_script.cpp')
-rw-r--r-- | engines/sword25/input/inputengine_script.cpp | 266 |
1 files changed, 104 insertions, 162 deletions
diff --git a/engines/sword25/input/inputengine_script.cpp b/engines/sword25/input/inputengine_script.cpp index 38ecc3cf56..2f16a21377 100644 --- a/engines/sword25/input/inputengine_script.cpp +++ b/engines/sword25/input/inputengine_script.cpp @@ -32,15 +32,10 @@ * */ -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- - #include "common/ptr.h" #include "common/str.h" #include "sword25/kernel/common.h" #include "sword25/kernel/kernel.h" -#include "sword25/kernel/callbackregistry.h" #include "sword25/script/script.h" #include "sword25/script/luabindhelper.h" #include "sword25/script/luacallback.h" @@ -51,270 +46,203 @@ namespace Sword25 { -using namespace Lua; - -// ----------------------------------------------------------------------------- -// Callback-Objekte -// ----------------------------------------------------------------------------- - -static void TheCharacterCallback(int Character); -static void TheCommandCallback(int Command); +static void theCharacterCallback(int character); +static void theCommandCallback(int command); namespace { class CharacterCallbackClass : public LuaCallback { public: - CharacterCallbackClass(lua_State *L) : LuaCallback(L) {}; + CharacterCallbackClass(lua_State *L) : LuaCallback(L) {} - Common::String Character; + Common::String _character; protected: int PreFunctionInvokation(lua_State *L) { - lua_pushstring(L, Character.c_str()); + lua_pushstring(L, _character.c_str()); return 1; } }; -Common::SharedPtr<CharacterCallbackClass> CharacterCallbackPtr; -// ----------------------------------------------------------------------------- +static CharacterCallbackClass *characterCallbackPtr = 0; // FIXME: should be turned into InputEngine member var class CommandCallbackClass : public LuaCallback { public: CommandCallbackClass(lua_State *L) : LuaCallback(L) { - Command = InputEngine::KEY_COMMAND_BACKSPACE; + _command = InputEngine::KEY_COMMAND_BACKSPACE; } - InputEngine::KEY_COMMANDS Command; + InputEngine::KEY_COMMANDS _command; protected: - int PreFunctionInvokation(lua_State *L) { - lua_pushnumber(L, Command); + int preFunctionInvokation(lua_State *L) { + lua_pushnumber(L, _command); return 1; } }; -Common::SharedPtr<CommandCallbackClass> CommandCallbackPtr; -// ------------------------------------------------------------------------- +static CommandCallbackClass *commandCallbackPtr = 0; // FIXME: should be turned into InputEngine member var -struct CallbackfunctionRegisterer { - CallbackfunctionRegisterer() { - CallbackRegistry::getInstance().registerCallbackFunction("LuaCommandCB", TheCommandCallback); - CallbackRegistry::getInstance().registerCallbackFunction("LuaCharacterCB", TheCharacterCallback); - } -}; -static CallbackfunctionRegisterer Instance; } -// ----------------------------------------------------------------------------- - -static InputEngine *GetIE() { - Kernel *pKernel = Kernel::GetInstance(); +static InputEngine *getIE() { + Kernel *pKernel = Kernel::getInstance(); BS_ASSERT(pKernel); - InputEngine *pIE = static_cast<InputEngine *>(pKernel->GetService("input")); + InputEngine *pIE = pKernel->getInput(); BS_ASSERT(pIE); return pIE; } -// ----------------------------------------------------------------------------- - -static int Init(lua_State *L) { - InputEngine *pIE = GetIE(); +static int init(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushbooleancpp(L, pIE->Init()); + lua_pushbooleancpp(L, pIE->init()); return 1; } -// ----------------------------------------------------------------------------- - -static int Update(lua_State *L) { - InputEngine *pIE = GetIE(); - - // Beim ersten Aufruf der Update()-Methode werden die beiden Callbacks am Input-Objekt registriert. - // Dieses kann nicht in _RegisterScriptBindings() passieren, da diese Funktion vom Konstruktor der abstrakten Basisklasse aufgerufen wird und die - // Register...()-Methoden abstrakt sind, im Konstruktor der Basisklasse also nicht aufgerufen werden können. - static bool FirstCall = true; - if (FirstCall) { - FirstCall = false; - pIE->RegisterCharacterCallback(TheCharacterCallback); - pIE->RegisterCommandCallback(TheCommandCallback); - } +static int update(lua_State *L) { + InputEngine *pIE = getIE(); - pIE->Update(); + pIE->update(); return 0; } -// ----------------------------------------------------------------------------- - -static int IsLeftMouseDown(lua_State *L) { - InputEngine *pIE = GetIE(); +static int isLeftMouseDown(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushbooleancpp(L, pIE->IsLeftMouseDown()); + lua_pushbooleancpp(L, pIE->isLeftMouseDown()); return 1; } -// ----------------------------------------------------------------------------- - -static int IsRightMouseDown(lua_State *L) { - InputEngine *pIE = GetIE(); +static int isRightMouseDown(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushbooleancpp(L, pIE->IsRightMouseDown()); + lua_pushbooleancpp(L, pIE->isRightMouseDown()); return 1; } -// ----------------------------------------------------------------------------- +static int wasLeftMouseDown(lua_State *L) { + InputEngine *pIE = getIE(); -static int WasLeftMouseDown(lua_State *L) { - InputEngine *pIE = GetIE(); - - lua_pushbooleancpp(L, pIE->WasLeftMouseDown()); + lua_pushbooleancpp(L, pIE->wasLeftMouseDown()); return 1; } -// ----------------------------------------------------------------------------- - -static int WasRightMouseDown(lua_State *L) { - InputEngine *pIE = GetIE(); +static int wasRightMouseDown(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushbooleancpp(L, pIE->WasRightMouseDown()); + lua_pushbooleancpp(L, pIE->wasRightMouseDown()); return 1; } -// ----------------------------------------------------------------------------- +static int isLeftDoubleClick(lua_State *L) { + InputEngine *pIE = getIE(); -static int IsLeftDoubleClick(lua_State *L) { - InputEngine *pIE = GetIE(); - - lua_pushbooleancpp(L, pIE->IsLeftDoubleClick()); + lua_pushbooleancpp(L, pIE->isLeftDoubleClick()); return 1; } -// ----------------------------------------------------------------------------- - -static int GetMouseX(lua_State *L) { - InputEngine *pIE = GetIE(); +static int getMouseX(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushnumber(L, pIE->GetMouseX()); + lua_pushnumber(L, pIE->getMouseX()); return 1; } -// ----------------------------------------------------------------------------- - -static int GetMouseY(lua_State *L) { - InputEngine *pIE = GetIE(); +static int getMouseY(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushnumber(L, pIE->GetMouseY()); + lua_pushnumber(L, pIE->getMouseY()); return 1; } -// ----------------------------------------------------------------------------- - -static int IsKeyDown(lua_State *L) { - InputEngine *pIE = GetIE(); +static int isKeyDown(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushbooleancpp(L, pIE->IsKeyDown((uint) luaL_checknumber(L, 1))); + lua_pushbooleancpp(L, pIE->isKeyDown((uint)luaL_checknumber(L, 1))); return 1; } -// ----------------------------------------------------------------------------- - -static int WasKeyDown(lua_State *L) { - InputEngine *pIE = GetIE(); +static int wasKeyDown(lua_State *L) { + InputEngine *pIE = getIE(); - lua_pushbooleancpp(L, pIE->WasKeyDown((uint) luaL_checknumber(L, 1))); + lua_pushbooleancpp(L, pIE->wasKeyDown((uint)luaL_checknumber(L, 1))); return 1; } -// ----------------------------------------------------------------------------- - -static int SetMouseX(lua_State *L) { - InputEngine *pIE = GetIE(); +static int setMouseX(lua_State *L) { + InputEngine *pIE = getIE(); - pIE->SetMouseX((int) luaL_checknumber(L, 1)); + pIE->setMouseX((int)luaL_checknumber(L, 1)); return 0; } -// ----------------------------------------------------------------------------- - -static int SetMouseY(lua_State *L) { - InputEngine *pIE = GetIE(); +static int setMouseY(lua_State *L) { + InputEngine *pIE = getIE(); - pIE->SetMouseY((int) luaL_checknumber(L, 1)); + pIE->setMouseY((int)luaL_checknumber(L, 1)); return 0; } -// ----------------------------------------------------------------------------- - -static void TheCharacterCallback(int Character) { - CharacterCallbackPtr->Character = static_cast<byte>(Character); - lua_State *L = static_cast<lua_State *>(Kernel::GetInstance()->GetScript()->getScriptObject()); - CharacterCallbackPtr->invokeCallbackFunctions(L, 1); +static void theCharacterCallback(int character) { + characterCallbackPtr->_character = static_cast<byte>(character); + lua_State *L = static_cast<lua_State *>(Kernel::getInstance()->getScript()->getScriptObject()); + characterCallbackPtr->invokeCallbackFunctions(L, 1); } -// ----------------------------------------------------------------------------- - -static int RegisterCharacterCallback(lua_State *L) { +static int registerCharacterCallback(lua_State *L) { luaL_checktype(L, 1, LUA_TFUNCTION); - CharacterCallbackPtr->registerCallbackFunction(L, 1); + characterCallbackPtr->registerCallbackFunction(L, 1); return 0; } -// ----------------------------------------------------------------------------- - -static int UnregisterCharacterCallback(lua_State *L) { +static int unregisterCharacterCallback(lua_State *L) { luaL_checktype(L, 1, LUA_TFUNCTION); - CharacterCallbackPtr->unregisterCallbackFunction(L, 1); + characterCallbackPtr->unregisterCallbackFunction(L, 1); return 0; } -// ----------------------------------------------------------------------------- - -static void TheCommandCallback(int Command) { - CommandCallbackPtr->Command = static_cast<InputEngine::KEY_COMMANDS>(Command); - lua_State *L = static_cast<lua_State *>(Kernel::GetInstance()->GetScript()->getScriptObject()); - CommandCallbackPtr->invokeCallbackFunctions(L, 1); +static void theCommandCallback(int command) { + commandCallbackPtr->_command = static_cast<InputEngine::KEY_COMMANDS>(command); + lua_State *L = static_cast<lua_State *>(Kernel::getInstance()->getScript()->getScriptObject()); + commandCallbackPtr->invokeCallbackFunctions(L, 1); } -// ----------------------------------------------------------------------------- - -static int RegisterCommandCallback(lua_State *L) { +static int registerCommandCallback(lua_State *L) { luaL_checktype(L, 1, LUA_TFUNCTION); - CommandCallbackPtr->registerCallbackFunction(L, 1); + commandCallbackPtr->registerCallbackFunction(L, 1); return 0; } -// ----------------------------------------------------------------------------- - -static int UnregisterCommandCallback(lua_State *L) { +static int unregisterCommandCallback(lua_State *L) { luaL_checktype(L, 1, LUA_TFUNCTION); - CommandCallbackPtr->unregisterCallbackFunction(L, 1); + commandCallbackPtr->unregisterCallbackFunction(L, 1); return 0; } -// ----------------------------------------------------------------------------- - static const char *PACKAGE_LIBRARY_NAME = "Input"; static const luaL_reg PACKAGE_FUNCTIONS[] = { - {"Init", Init}, - {"Update", Update}, - {"IsLeftMouseDown", IsLeftMouseDown}, - {"IsRightMouseDown", IsRightMouseDown}, - {"WasLeftMouseDown", WasLeftMouseDown}, - {"WasRightMouseDown", WasRightMouseDown}, - {"IsLeftDoubleClick", IsLeftDoubleClick}, - {"GetMouseX", GetMouseX}, - {"GetMouseY", GetMouseY}, - {"SetMouseX", SetMouseX}, - {"SetMouseY", SetMouseY}, - {"IsKeyDown", IsKeyDown}, - {"WasKeyDown", WasKeyDown}, - {"RegisterCharacterCallback", RegisterCharacterCallback}, - {"UnregisterCharacterCallback", UnregisterCharacterCallback}, - {"RegisterCommandCallback", RegisterCommandCallback}, - {"UnregisterCommandCallback", UnregisterCommandCallback}, + {"Init", init}, + {"Update", update}, + {"IsLeftMouseDown", isLeftMouseDown}, + {"IsRightMouseDown", isRightMouseDown}, + {"WasLeftMouseDown", wasLeftMouseDown}, + {"WasRightMouseDown", wasRightMouseDown}, + {"IsLeftDoubleClick", isLeftDoubleClick}, + {"GetMouseX", getMouseX}, + {"GetMouseY", getMouseY}, + {"SetMouseX", setMouseX}, + {"SetMouseY", setMouseY}, + {"IsKeyDown", isKeyDown}, + {"WasKeyDown", wasKeyDown}, + {"RegisterCharacterCallback", registerCharacterCallback}, + {"UnregisterCharacterCallback", unregisterCharacterCallback}, + {"RegisterCommandCallback", registerCommandCallback}, + {"UnregisterCommandCallback", unregisterCommandCallback}, {0, 0} }; @@ -336,9 +264,9 @@ static const lua_constant_reg PACKAGE_CONSTANTS[] = { // ----------------------------------------------------------------------------- bool InputEngine::registerScriptBindings() { - Kernel *pKernel = Kernel::GetInstance(); + Kernel *pKernel = Kernel::getInstance(); BS_ASSERT(pKernel); - ScriptEngine *pScript = static_cast<ScriptEngine *>(pKernel->GetService("script")); + ScriptEngine *pScript = pKernel->getScript(); BS_ASSERT(pScript); lua_State *L = static_cast<lua_State *>(pScript->getScriptObject()); BS_ASSERT(L); @@ -346,10 +274,24 @@ bool InputEngine::registerScriptBindings() { if (!LuaBindhelper::addFunctionsToLib(L, PACKAGE_LIBRARY_NAME, PACKAGE_FUNCTIONS)) return false; if (!LuaBindhelper::addConstantsToLib(L, PACKAGE_LIBRARY_NAME, PACKAGE_CONSTANTS)) return false; - CharacterCallbackPtr = Common::SharedPtr<CharacterCallbackClass>(new CharacterCallbackClass(L)); - CommandCallbackPtr = Common::SharedPtr<CommandCallbackClass>(new CommandCallbackClass(L)); + assert(characterCallbackPtr == 0); + characterCallbackPtr = new CharacterCallbackClass(L); + + assert(commandCallbackPtr == 0); + commandCallbackPtr = new CommandCallbackClass(L); + + setCharacterCallback(theCharacterCallback); + setCommandCallback(theCommandCallback); return true; } +void InputEngine::unregisterScriptBindings() { + delete characterCallbackPtr; + characterCallbackPtr = 0; + + delete commandCallbackPtr; + commandCallbackPtr = 0; +} + } // End of namespace Sword25 |