//---------------------------------------------------------------------------------------------------------------------- void Game::loadLevel(const std::string &_level) { std::cout<<"LOADING LEVEL!\n"; // create a parser and tokenize level config Parser level_data(_level); level_data.tokenize(); // take config worldsize and assign m_world->m_sizeR=level_data.getWorldSize(); // re-assign a new player shared pointer player_ptr player(new Player()); m_world->m_player=player; // take config pylon positions and setup unsigned int pylonAmt=level_data.getPylonPos().size(); std::cout<<"Pylons : "<<pylonAmt<<"\n"; for(unsigned int i=0;i<pylonAmt;++i) { pylon_ptr pylon(new Pylon()); m_world->m_pylons.push_back(pylon); } setupPylons(level_data.getPylonPos()); // take config standard boid amount and setup int stdBoidAmt=level_data.getStdBoids(); std::cout<<"Standard Boids : "<<stdBoidAmt<<"\n"; for(int i=0;i<stdBoidAmt;++i) { stdBoid_ptr stdBoid(new StandardBoid(m_world->m_sizeR)); m_world->m_stdBoids.push_back(stdBoid); } // take config leader boid amount and setup int ldrBoidAmt=level_data.getLdrBoids(); std::cout<<"Leader Boids : "<<ldrBoidAmt<<"\n"; for(int i=0;i<ldrBoidAmt;++i) { ldrBoid_ptr ldrBoid(new LeaderBoid(m_world->m_sizeR)); m_world->m_ldrBoids.push_back(ldrBoid); } // take config attack boid amount and setup int atkBoidAmt=level_data.getAtkBoids(); std::cout<<"Attack Boids : "<<atkBoidAmt<<"\n"; for(int i=0;i<atkBoidAmt;++i) { atkBoid_ptr atkBoid(new AttackBoid(m_world->m_sizeR)); m_world->m_atkBoids.push_back(atkBoid); } std::cout<<"LEVEL LOADED!\n"; }
bool Level::LoadData( const std::string& filename, const int first_sprite, const int second_sprite ) { std::fstream level_data(filename.c_str()); if (!level_data) { std::cout << "Error loading level data file." << std::endl; return false; } level_data >> tile_width >> tile_height >> num_tiles_wide >> num_tiles_high; for (int i = 0; i < num_tiles_high; ++i) { for (int j = 0; j < num_tiles_wide; ++j) { tile_t temp; temp.pos.x = j * tile_width; temp.pos.y = i * tile_height; temp.collision_box.left = temp.pos.x; temp.collision_box.right = temp.pos.x + tile_width; temp.collision_box.top = temp.pos.y; temp.collision_box.bottom = temp.pos.y + tile_height; int tile_number; level_data >> tile_number; switch(tile_number) { case 0: temp.is_walkable = true; temp.id = -1; temp.tile_state = EMPTY; break; case 1: temp.is_walkable = false; temp.id = first_sprite; temp.tile_state = BRICK | DESTROYABLE; break; case 2: temp.is_walkable = false; temp.id = second_sprite; temp.tile_state = BRICK | NOT_DESTROYABLE; break; case 5: { temp.is_walkable = true; temp.id = -1; temp.tile_state = EMPTY; SpawnPoint_t *sp = new SpawnPoint_t(temp.pos); spawn_points.push_back(sp); break; } default: break; } tiles.push_back(temp); } } level_data.close(); if (tiles.empty()) return false; return true; }