int initSpells() { std::cout << "Loading Spells...\n"; LuaSpells = luaL_newstate(); //create new lua state luaL_openlibs(LuaSpells); lua_register(LuaSpells,"loadspell",loadspell); //register loadspell lua_register(LuaSpells,"loadsummon",loadsummon); //register loadsummon registerLua(LuaSpells); //register functions if(luaL_loadfile(LuaSpells, "Lua\\Spells.lua") || lua_pcall(LuaSpells, 0, 0, 0)) { std::cout<<"Error: failed to load Spells.lua"<<std::endl; std::cout << lua_tostring(LuaSpells,-1) << "\n"; getch(); return -1; } lua_getglobal(LuaSpells,"loadSpells"); lua_pcall(LuaSpells,0,0,0); //execute once to load units lua_pop(LuaSpells,1); return 0; }
//---------------------------------------------------------------------------------------------------------------------- GameWorld::GameWorld(int _level) { L = luaL_newstate(); registerLua(L); m_entityMgr = new EntityManager(); m_win = 0; m_lose = 0; m_numberOfRiotersDead = 0; m_numberOfRiotersHome = 0; m_activePolice = 0; m_resetID = 1; // get a different lua level based in input level switch (_level) { case 1 : { luabridge::LuaRef startLevel = luabridge::getGlobal(L, "level1"); startLevel(); break; } case 2 : { luabridge::LuaRef startLevel = luabridge::getGlobal(L, "level2"); startLevel(); break; } case 3 : { luabridge::LuaRef startLevel = luabridge::getGlobal(L, "level3"); startLevel(); break; } case 4 : { luabridge::LuaRef startLevel = luabridge::getGlobal(L, "level4"); startLevel(); break; } case 5 : { luabridge::LuaRef startLevel = luabridge::getGlobal(L, "level5"); startLevel(); break; } default : { std::cout<<"Error: Invalid level"<<std::endl; break; } } // load in the meshes m_streetMesh = new ngl::Obj(m_streetMeshFile); //Obj for roads, should be tris m_buildingMesh = new ngl::Obj(m_buildingMeshFile); //Obj for buildings, should be tris m_streetMesh->createVAO(); m_buildingMesh->createVAO(); m_cellGraph = new CellGraph(m_cellGraphFile, 1); //Obj for cell graph, must be quads m_cellGraph->generateWalls(); m_policeMesh = new ngl::Obj("models/policeMan.obj"); m_rioterMesh = new ngl::Obj("models/rioterMan.obj"); m_treeMesh = new ngl::Obj("models/tree.obj"); m_streetLightMesh = new ngl::Obj("models/streetLight.obj"); std::vector<ngl::Vec3> wallCentres = m_cellGraph->getWallCentres(); std::vector<ngl::Vec3> wallNormals = m_cellGraph->getWallNormals(); std::vector<int> wallRotations = m_cellGraph->getWallRotations(); m_policeMesh->createVAO(); m_rioterMesh->createVAO(); m_treeMesh->createVAO(); m_streetLightMesh->createVAO(); //initialise rioters for (int i = 0; i < m_initialNumberOfRioters ; ++i) { Rioter* newRioter = new Rioter(this, m_rioterMesh); newRioter->setBoudingRadius(0.5f); newRioter->setDetectionRadius(3.5f); newRioter->setHeading(ngl::Vec3(-1+2*((float)rand())/RAND_MAX, 0.f, -1+2*((float)rand())/RAND_MAX)); newRioter->setPos(ngl::Vec3(-25+50*((float)rand())/RAND_MAX, 0.f, -25+50*((float)rand())/RAND_MAX)); m_cellGraph->initializeCells(m_entityMgr->getEntityFromID(newRioter->getID())); while (newRioter->getCurrentCellID() < 0) { newRioter->setPos(ngl::Vec3(-50+100*((float)rand())/RAND_MAX, 0.f, -50+100*((float)rand())/RAND_MAX)); m_cellGraph->initializeCells(m_entityMgr->getEntityFromID(newRioter->getID())); } m_rioters.push_back(newRioter); } m_numberOfRioters = m_rioters.size(); // initialise trees for (int i = 0; i < m_numberOfTrees ; ++i) { StaticEntity* newTree = new StaticEntity(this, ngl::Vec3(0,0,0),ngl::Vec3(0.0f,360*((float)rand()/RAND_MAX),0.0f),1.0,obstacleTree,m_treeMesh); newTree->setPos(ngl::Vec3(-25+50*((float)rand())/RAND_MAX, 0.f, -25+50*((float)rand())/RAND_MAX)); m_cellGraph->initializeCells(m_entityMgr->getEntityFromID(newTree->getID())); while (newTree->getCurrentCellID() < 0) { newTree->setPos(ngl::Vec3(-50+100*((float)rand())/RAND_MAX, 0.f, -50+100*((float)rand())/RAND_MAX)); m_cellGraph->initializeCells(m_entityMgr->getEntityFromID(newTree->getID())); } m_obstacles.push_back(newTree); } int numberOfWalls = wallCentres.size(); //pick random streetlight positions int sample[m_numberOfStreetLights]; std::vector<int> choices; int choice; for (int i=0; i<numberOfWalls; i++) { choices.push_back(i); } srand (time(NULL)); assert (m_numberOfStreetLights<=numberOfWalls && "too many streetlights for the map size!"); for(int i=0; i<m_numberOfStreetLights; i++) { do { choice = rand() % numberOfWalls; } while((choices[choice]==-1)); choices[choice]=-1; // prevents duplicate choices sample[i] = choice; } for (int i = 0; i < m_numberOfStreetLights ; i++) { StaticEntity* newStreetLight = new StaticEntity(this, wallCentres[sample[i]]+(0.3*wallNormals[sample[i]]), ngl::Vec3(0.0f,wallRotations[sample[i]],0.0f), 0.2, obstacleStreetLight, m_streetLightMesh); m_cellGraph->initializeCells(m_entityMgr->getEntityFromID(newStreetLight->getID())); m_obstacles.push_back(newStreetLight); } m_numberOfObstacles = m_obstacles.size(); }