示例#1
0
bool CLuaEngine::Init(int stacksize/* = 51200 */)
{
	if( m_pLuaState )
		return true;
	
	m_pLuaState = lua_open();	//创建一个Lua状态机的实例
	if( !m_pLuaState )
	{
		DEBUG_STROUT("[CLuaEngine] lua_open error...");
		return false;
	}

#ifdef USE_STANDARAD_LUA_LIBS	
	luaL_openlibs(m_pLuaState);           //加载Lua的基本库
#else
	OpenLuaLibs(m_pLuaState);
#endif
	
	if( !lua_checkstack(m_pLuaState, stacksize) )     //增加Lua的堆栈大小,防止因为堆栈过小而死机
	{
		DEBUG_STROUT("[CLuaEngine] check lua stack size error(stacksize=%d, top=%d, base=%d)", stacksize, m_pLuaState->top, m_pLuaState->base);
		return false;
	}

//#ifdef _DEBUG
//	lua_sethook( m_pLuaState, Lua_Trace, LUA_MASKLINE , 0);
//#endif

	lua_register(m_pLuaState, "print", Lua_print); //注册常用函数
	
	return true;
}
示例#2
0
bool AI::initSpawnEnemies(string scriptName)
{
	spawnScript = lua_open();
	OpenLuaLibs(spawnScript);
	if(luaL_dofile(spawnScript, scriptName.c_str())) //spawning
		return false;
	
	lua_getglobal(spawnScript,"init");

	convertNodesToInt();
	sendArray(nodesInt, mapSize ,spawnScript);

	lua_pushnumber(spawnScript,enemiesPerMin);
	lua_pushnumber(spawnScript,difficulty);


	lua_pcall(spawnScript, 3, 1, 0);
	int a = (int)lua_tonumber(spawnScript, -1);
	
	
	lua_pop(spawnScript, 1);
	cout << "output: " << a << endl;

	return true;
}
示例#3
0
bool AI::initFindTarget(string scriptName)
{
	targetScript = lua_open();
	OpenLuaLibs(targetScript);
	if(luaL_dofile(targetScript, scriptName.c_str()))
		return false;

	lua_getglobal(targetScript, "init");

	lua_pushnumber(targetScript, mapSize);
	lua_pcall(targetScript, 1, 1, 0);

	int a = (int)lua_tonumber(targetScript, -1);
	lua_pop(targetScript, 1);

	return true;
}
示例#4
0
bool AI::initFindPath(string scriptName)
{
	pathScript = lua_open();
	OpenLuaLibs(pathScript);
	if(luaL_dofile(pathScript, scriptName.c_str()))//pathfinding
		return false;

	lua_getglobal(pathScript, "init");

	convertNodesToInt();
	sendArray(nodesInt, mapSize, pathScript);

	lua_pushnumber(pathScript, mapSize);
	lua_pcall(pathScript, 2, 0, 0);

	return true;
}