LuaBindingNamespace::self_type& LuaBindingNamespace::addConst(const char* const_name, const char* n, size_t s) { lua_State* state = getLuaState(); lua_pushstring(state, const_name); lua_pushlstring(state, n, s); lua_settable(state, getNamespaceTable()); return *this; }
lua_State * LuaEngineUtils::getLuaStateByFunName(const char *luaFileName, const char *funName) { if(isOpenLua(luaFileName)){ lua_State* ls = getLuaState(); lua_getglobal(ls, funName); return ls; } CCLOG("Open Lua Error getLuaStateByFunName: file = %s, fun = %s", luaFileName, funName); return NULL; }
bool LuaEngineUtils::callLuaFuncReturnBool(const char *luaFileName, const char *funcName, const char *format, ...) { va_list args; va_start(args, format); bool b = callLuaFunc(luaFileName, funcName, format, args); va_end(args); if(b){ lua_State *ls = getLuaState(); if(lua_isboolean(ls, -1)){ return lua_toboolean(ls, -1); } } return false; }
const char * LuaEngineUtils::callLuaFuncReturnChar(const char *luaFileName, const char *funcName, const char *format, ...) { va_list args; va_start(args, format); bool b = callLuaFunc(luaFileName, funcName, format, args); va_end(args); if(b){ lua_State *ls = getLuaState(); if(lua_isstring(ls, -1)){ return lua_tostring(ls, -1); } } return NULL; }
int LuaEngineUtils::callLuaFuncReturnInt(const char *luaFileName, const char *funcName, const char *format, ...) { va_list args; va_start(args, format); bool b = callLuaFunc(luaFileName, funcName, format, args); va_end(args); if(b){ lua_State *ls = getLuaState(); if(lua_isnumber(ls, -1)){ return lua_tonumber(ls, -1); } } return 0; }
void InAppPurchaseDelegate::onPurchaseFailed( const char* desc ) { if(m_ScriptHandler) { auto stack = LuaEngine::getInstance()->getLuaStack(); auto state = stack->getLuaState(); if(state) { stack->pushInt(IAP_EVENT_PURCHASE_FAILED); stack->pushString(desc); stack->executeFunctionByHandler(m_ScriptHandler,2); } } }
void InAppPurchaseDelegate::onQueryProductFinish() { m_bQuery = false; if(m_ScriptHandler) { auto stack = LuaEngine::getInstance()->getLuaStack(); auto state = stack->getLuaState(); if(state) { stack->pushInt(IAP_EVENT_QUERY_FINISH); stack->executeFunctionByHandler(m_ScriptHandler,1); } } }
const char* LuaEngineUtils::getLuaVarString(const char *luaFileName, const char *varName) { if(isOpenLua(luaFileName)){ lua_State* ls = getLuaState(); lua_settop(ls, 0); lua_getglobal(ls, varName); int statesCode = lua_isstring(ls, 1); if(statesCode != 1){ CCLOG("Read Var String error = %d", statesCode); return NULL; } const char* str = lua_tostring(ls, 1); lua_pop(ls, 1); return str; } return NULL; }
const char* LuaEngineUtils::getLuaVarTableProp(const char *luaFileName, const char *varName, const char *key) { if(isOpenLua(luaFileName)){ lua_State* ls = getLuaState(); lua_getglobal(ls, varName); int statusCode = lua_istable(ls, -1); if(statusCode != 1){ CCLOG("Read Var Table error = %d", statusCode); return NULL; } lua_pushstring(ls, key); lua_gettable(ls, -2); const char* str = lua_tostring(ls, -1); lua_pop(ls, -1); return str; } return NULL; }
void InAppPurchaseDelegate::onPurchaseFinish(void* content) { if(m_ScriptHandler) { auto stack = LuaEngine::getInstance()->getLuaStack(); auto state = stack->getLuaState(); if(state) { const char* str = (const char*)content; stack->pushInt(IAP_EVENT_PURCHASE_FINISH); if (str != NULL ) { stack->pushString(str); }else stack->pushNil(); stack->executeFunctionByHandler(m_ScriptHandler,2); } } }
const char* LuaEngineUtils::getLuaVarTable(const char *luaFileName, const char *varName) { if(isOpenLua(luaFileName)){ lua_State* ls = getLuaState(); lua_getglobal(ls, varName); int it = lua_gettop(ls); lua_pushnil(ls); string result = ""; while (lua_next(ls, it)) { string key = lua_tostring(ls, -2); string value = lua_tostring(ls, -1); result += key + ":" + value + "\t"; lua_pop(ls, 1); } lua_pop(ls, 1); return result.c_str(); } return NULL; }
static LuaStack * initExecParam(Node *node, int phase) { if (!node) return nullptr; int id = node->_luaID; if (id<1) { return nullptr; } LuaEngine* engine = LuaEngine::getInstance(); auto stack = engine->getLuaStack(); stack->clean(); auto L = stack->getLuaState(); luaL_getmetatable(L, "cc.Node"); /* stack: mt */ lua_pushliteral(L, "EventDispatcher"); lua_rawget(L, -2); /* stack: mt func */ lua_pushstring(L, "tolua_ubox"); /* stack: mt func key */ lua_rawget(L, -3); /* stack: mt func ubox */ if (lua_isnil(L, -1)) { // use global ubox lua_pop(L, 1); /* stack: mt func */ lua_pushstring(L, "tolua_ubox"); /* stack: mt func key */ lua_rawget(L, LUA_REGISTRYINDEX); /* stack: mt func ubox */ }; lua_pushlightuserdata(L, node); /* stack: mt func ubox ptr */ lua_rawget(L,-2); /* stack: mt func ubox ud */ if (lua_isnil(L, -1)) { stack->clean(); return nullptr; } int etype = (phase == NODE_TOUCH_CAPTURING_PHASE) ? NODE_TOUCH_CAPTURE_EVENT : NODE_TOUCH_EVENT; lua_pushnumber(L, etype); /* stack: mt func ubox ud etype */ lua_remove(L, -3); /* stack: mt func ud etype */ return stack; }
const bool CtrlrLuaMethod::setCodeInternal(const String &newMethodCode) { bool compileRet = owner.getOwner().runCode (newMethodCode); errorString.clear(); errorString.append ("Compile: "+getName()+" - ", out, Colours::black); String error; if (compileRet && getName() != String::empty) { try { setObject ( (luabind::object)luabind::globals (getLuaState()) [(const char *)getName().toUTF8()] ); } catch (const luabind::error &e) { error = String(e.what()); } } else if (compileRet == false) { error = owner.getOwner().getLastError(); } if (compileRet) { errorString.append ("OK\n", out.withStyle(Font::bold), Colours::black); } else { errorString.append ("FAILED\n", out.withStyle(Font::bold), Colours::darkred); errorString.append (error+"\n", out, Colours::darkred); } setValid(compileRet); return (compileRet); }