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; } } } }
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 ); } }
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; } }