Esempio n. 1
0
//----------------------------------------------------------------------------------------------------------------------
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";
}
Esempio n. 2
0
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;
}