Ejemplo n.º 1
0
	void CPowerupManager::generatePowerup( const Core::CMap& map )
	{
		while( true ) {
			int y = std::rand() % map.GetSize().first;
			int x = std::rand() % map.GetSize().second;
			if( map.GetField()[y][x] == ROAD && powerups.find( CCoordinates( x, y ) ) == powerups.end() ) {
				int type = std::rand() % 8;
				if( type != NONE ) {
					powerups[Core::CCoordinates( x, y )] = PowerupType( type );
					return;
				}
			}
		}
	}
Ejemplo n.º 2
0
	void CPowerupManager::GeneratePowerups( const CMap& map )
	{
		int n = 0;
		auto size = map.GetSize();
		switch( CGameMode::GetObjectRate() ) {
			case CGameMode::NO: n = 0;  break;
			case CGameMode::FEW: n = size.first * size.second / 100; break;
			case CGameMode::NORMAL: n = size.first * size.second / 75; break;
			case CGameMode::MANY: n = size.first * size.second / 50; break;
			default: n = 0;  break;
		}
		if( initialized && CGameMode::GetObjectChangeModel() == CGameMode::NO_CHANGE ) {
			return;
		}
		if( !initialized || CGameMode::GetObjectChangeModel() == CGameMode::RANDOM ) {
			if( CGameMode::GetObjectChangeModel() == CGameMode::RANDOM ) {
				powerupCoordinates.clear();
			}
			initialized = true;
			for( int i = 0; i < n; ++i ) {
				int x, y;
				do {
					x = std::rand() % map.GetSize().first;
					y = std::rand() % map.GetSize().second;
				} while( map.GetField()[y][x] != ROAD || powerups.find( CCoordinates( x, y ) ) != powerups.end() );
				powerupCoordinates.push_back( CCoordinates( x, y ) );
			}
		}
		powerups.clear();
		for( auto coordinates : powerupCoordinates ) {
			int type;
			do {
				type = std::rand() % 8;
			} while( type == NONE );
			powerups[Core::CCoordinates( coordinates.x, coordinates.y )] = PowerupType( type );
		}
	}
Ejemplo n.º 3
0
void Landscape::init()
{
	// init variables
	int dim = FIELD_SIZE;
	generate = new Generator(_levelNr); //init generator with fix random seed, change this later to TIME or something..

	//generating textures
	//texStreet = generate->gStreetTexture();

	//generating skybox
	_skybox = new Skybox();

	// generating map
	map = new TerrainType*[dim];
	generate->Terrain(dim, map, Blocks, Streets, Places);

	// for pop density
	//choose the center of the town, somewhere near the center of map
	int midX = rand()%(FIELD_SIZE/2)+FIELD_SIZE/4;
	int midZ = rand()%(FIELD_SIZE/2)+FIELD_SIZE/4;

	//generating houses
	Houses.clear();
	for (unsigned int i = 0; i<Blocks.size(); ++i)
	{
		Block * b = Blocks.at(i);
		int * mp = b->getMidPoint();
		int x = mp[0];
		int z = mp[1];
		int pd = 100 - sqrtf( (mp[0]-midX)*(mp[0]-midX)+(mp[1]-midZ)*(mp[1]-midZ) ) * 100 / (FIELD_SIZE);
		b->setPopDens(pd);
		generate->gBlock(b, Houses); //, mapHouse)
	}

	for (unsigned int i = 0; i<Houses.size(); ++i)
	{
		generate->gHouse(Houses.at(i));
	}

	if(DEBUG_HOUSES)
	{
		for (int i = 0; i<Houses.size(); ++i)
		{
			House * h = Houses.at(i);
			std::cout << "house nr."<<i<<": "<<h->x1() <<"/"<<h->z1()<<" ; "<<h->x2() <<"/"<<h->z2()<<std::endl;
		}
	}

	//generate powerups
	//////////////////////////

	// map for quick access to power ups
	PowerupPointerMap = new PowerUp**[dim];
	for (int i = 0; i<dim;++i)
	{
		*(PowerupPointerMap+i) = new PowerUp*[dim];
		for (int j=0; j<dim; j++)
		{
			PowerupPointerMap[i][j] = 0;
		}
	}

	//create all the power ups..
	for (unsigned int i = 0; i<N_POWERUPS; ++i)
	{
		int *loc = this->getFreeLocation();
		PowerUp * pu = new PowerUp(loc, PowerupType(rand()%2+1));
		if(DEBUG_LANDSCAPE){std::cout << "Created powerup nr."<<i<<" at "<<loc[0]<<" / "<<loc[1]<<std::endl;}
		Powerups.push_back(pu);
		PowerupPointerMap[loc[0]][loc[1]] = pu;
	}
}