Esempio n. 1
0
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;
}
Esempio n. 2
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;
}