int luaSystemRun (char *funcName) { if(SystemL==NULL) return 1; for (int i=0;i<GOUTPUTMAX;i++) SystemOutput[i][0]='\0'; if(strcmp(funcName,"OnInit")==0) { World->Stop=false; World->MainStepCount=-1; for(int i=0;i<GKEYMAX;i++) KeyList[i].Lock=0; } // int status; // struct Smain s; //グローバル変数の登録 for(int i=0;i<VarCount;i++) { lua_pushnumber(SystemL,ValList[i].Val); lua_setglobal(SystemL,ValList[i].Name); } // グローバルテーブルからmain関数を拾ってスタックに積む lua_pushstring(SystemL, funcName); lua_gettable(SystemL, LUA_GLOBALSINDEX); if(lua_topointer(SystemL,-1)==NULL) {//もし関数がないなら lua_pop ( SystemL, 1 );//スタックを戻す if(strcmp(funcName,"OnFrame")==0) { lua_pushstring(SystemL, "main"); lua_gettable (SystemL, LUA_GLOBALSINDEX); } else return 0; } // 関数を呼ぶ。lua_callの第2引数は渡す引数の数、第3引数は戻り値の数。 // 関数とその引数はスタックから取り除かれ、戻り値がスタックに残る。 SystemErrorCode=lua_pcall(SystemL, 0, 0,0); if(SystemErrorCode)sprintf(SystemErrorStr,"%s %s\n",lua_tostring(SystemL,-1)); for(int i=0;i<VarCount;i++) { lua_pushstring( SystemL , ValList[i].Name ); // (1) Luaの変数名toCを指定 lua_gettable( SystemL , LUA_GLOBALSINDEX ); // (2)と(3)の動作 double v = lua_tonumber( SystemL , -1 ); // (4) 仮想スタックのトップ内容(toCの中身)を数値型で取り出す if(ValList[i].Val!=v) ValList[i].Updated=true; ValList[i].Val=(GFloat)v; lua_pop( SystemL , 1 ); // (5) 取り出したら仮想スタックを1個popする if(ValList[i].Val>ValList[i].Max) ValList[i].Val=ValList[i].Max; if(ValList[i].Val<ValList[i].Min) ValList[i].Val=ValList[i].Min; } luaUpdateVal(); return 0; }
int luaScriptRun (lua_State *L,char *funcName) { // int status; // struct Smain s; //グローバル変数の登録 for(int i=0;i<VarCount;i++) { lua_pushnumber(L,ValList[i].Val); lua_setglobal(L,ValList[i].Name); } // グローバルテーブルからmain関数を拾ってスタックに積む lua_pushstring(L, funcName); lua_gettable (L, LUA_GLOBALSINDEX); if(lua_topointer(L,-1)==NULL) {//もし関数がないなら lua_pop ( L, 1 );//スタックを戻す if(strcmp(funcName,"OnFrame")==0) { lua_pushstring(L, "main"); lua_gettable (L, LUA_GLOBALSINDEX); } else return 0; } // 関数を呼ぶ。lua_callの第2引数は渡す引数の数、第3引数は戻り値の数。 // 関数とその引数はスタックから取り除かれ、戻り値がスタックに残る。 ScriptErrorCode=lua_pcall(L, 0, 0,0); if(ScriptErrorCode)sprintf(ScriptErrorStr,"%s\n",lua_tostring(L,-1)); for(int i=0;i<VarCount;i++) { lua_pushstring( L , ValList[i].Name ); // (1) Luaの変数名toCを指定 lua_gettable( L , LUA_GLOBALSINDEX ); // (2)と(3)の動作 double v = lua_tonumber( L , -1 ); // (4) 仮想スタックのトップ内容(toCの中身)を数値型で取り出す if(ValList[i].Val!=v) ValList[i].Updated=true; ValList[i].Val=(GFloat)v; lua_pop( L , 1 ); // (5) 取り出したら仮想スタックを1個popする if(ValList[i].Val>ValList[i].Max) ValList[i].Val=ValList[i].Max; if(ValList[i].Val<ValList[i].Min) ValList[i].Val=ValList[i].Min; } luaUpdateVal(); randTime+=rand()%3+1; if(randTime>20000000) randTime=0; return 0; }