Example #1
0
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;
}
Example #2
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();
}