bool ParserNivel::extraerFondo(const pugi::xml_document* doc, bool isLoadingDefault)
{
	bool exito = true;
	pugi::xml_node escenarioNode = doc->child("escenario");
	std::string anchoString = escenarioNode.child("fondo").child("ancho").first_child().value();
	std::string altoString = escenarioNode.child("fondo").child("alto").first_child().value();
	std::string spriteIdString = escenarioNode.child("fondo").child("spriteId").first_child().value();

	if(! validarNumero(anchoString))
	{
		Logger::Instance()->LOG("Se cargo el ancho del fondo por default", WARN);
		anchoString = "12";
	}
	if(! validarNumero(altoString))
	{
		Logger::Instance()->LOG("Se cargo el alto del fondo por default", WARN);
		altoString = "12";
	}

	m_fondo.ancho = std::stoi(anchoString);
	m_fondo.alto = std::stoi(altoString);
	m_fondo.spriteId = spriteIdString;

	return true;

}
bool ParserNivel::extraerElementos(const pugi::xml_document* doc, bool isLoadingDefault)
{
	bool exito = true;
	pugi::xml_node elemNode = doc->child("escenario");
	elemNode = elemNode.child("elementos");
	for (pugi::xml_node eleme = elemNode.first_child(); eleme; eleme = eleme.next_sibling())
	{
	   Elemento elem;
	   std::string id = eleme.child("spriteId").first_child().value();

	   bool found = false;
	   std::vector<Sprite> lista =  getListaSprites();
	   for(int i=0; i < lista.size(); i++)
	   {
	      if (id == lista[i].id)
	      {
	    	  found = true;
	      }
	   }
	   if(found)
	   {
		   elem.spriteId = id;
	   }
	   else
	   {
		   Logger::Instance()->LOG("Al no tener un id existente entre los sprites, se asignará un sprte default", WARN);
		   elem.spriteId = "default";
	   }
	   std::string posx = eleme.child("posicion").child("x").first_child().value();
	   std::string posy = eleme.child("posicion").child("y").first_child().value();
	   Posicion pos;
	   if (!validarNumero(posx))
	   {
		   Logger::Instance()->LOG("Se cargo la posx del elemento por default", WARN);
		   posx = "1";
	   }
	   if (!validarNumero(posy))
	   {
		   Logger::Instance()->LOG("Se cargo la posy del elemento por default", WARN);
		   posy = "1";
	   }
	   pos.x = stoi(posx);
	   pos.y = stoi(posy);
	   elem.posicion = pos;

	   m_listaDeElementos.push_back(elem);
	}
	return exito;
}
Beispiel #3
0
bool Validador::validarTermino(std::string termino) {
	if (validarNumero(termino) && termino.length() > LONG_MAX_NUMERO) {
		return false;
	}

	return true;
}
bool ParserNivel::extraerSprites(const pugi::xml_document* doc)
{
	bool exito = true;
	pugi::xml_node spritesNode = doc->child("sprites");

	for (pugi::xml_node spr = spritesNode.first_child(); spr; spr = spr.next_sibling())
	{
	   Sprite sprite;
	   std::string id = spr.child("id").first_child().value();
	   std::string path = spr.child("path").first_child().value();
	   std::string cantidad = spr.child("cantidad").first_child().value();
	   std::string ancho = spr.child("ancho").first_child().value();
	   std::string alto = spr.child("alto").first_child().value();
	   if (!validarNumero(cantidad))
			{
		   	   Logger::Instance()->LOG("Se cargo el valor cantidad del sprite por default", WARN);
				cantidad = "2";
			}
	   if (!validarNumero(ancho))
	   			{
		   	   	   Logger::Instance()->LOG("Se cargo el valor ancho del sprite por default", WARN);
	   				ancho = "11";
	   			}
	   if (!validarNumero(alto))
	  	   			{
		   	   	   	   Logger::Instance()->LOG("Se cargo el valor alto del por default", WARN);
	  	   				alto = "11";
	  	   			}
		if (!validarPath(path))
			{
				Logger::Instance()->LOG("Se cargo el path del sprite por default", WARN);
				path = "Utils/Default/sprite.jpg";
				id = "default";

			}

	   sprite.id = id;
	   sprite.path = path;
	   sprite.cantidad = stoi(cantidad);
	   sprite.ancho = stoi(ancho) ;
	   sprite.alto = stoi(alto);
	   m_listaDeSprites.push_back(sprite);
	}
	return exito;
}
bool ParserNivel::extraerEscenario(const pugi::xml_document* doc, bool isLoadingDefault)
{

	bool exito = true;
	pugi::xml_node escenarioNode = doc->child("escenario");
	std::string cantJugadoresStr = escenarioNode.child("cantidadMaximaJugadores").first_child().value();
	if (!validarNumero(cantJugadoresStr))
			{
				Logger::Instance()->LOG("Se cargo la cantidad de jugadores del escenario por default", WARN);
				cantJugadoresStr = "2";
			}

	std::string anchoString = escenarioNode.child("ancho").first_child().value();

	if (!validarNumero(anchoString))
		{
			Logger::Instance()->LOG("Se cargo el ancho del escenario por default", WARN);
			anchoString = "110";
		}
	std::string altoString = escenarioNode.child("alto").first_child().value();
	if (!validarNumero(altoString))
		{
			Logger::Instance()->LOG("Se cargo el alto del escenario por default", WARN);
			altoString = "1100";
		}
	std::string velScrollString = escenarioNode.child("velocidadScroll").first_child().value();
	if (!validarNumero(velScrollString))
	{
		Logger::Instance()->LOG("Se cargo velocidad de scrolling del escenario por default", WARN);
		velScrollString = "5";
	}

			extraerFondo(doc,1);
			extraerElementos(doc,1);
			m_escenario.cantidadJugadores = std::stoi(cantJugadoresStr);
			m_escenario.ancho = std::stoi(anchoString);
			m_escenario.alto = std::stoi(altoString);
			m_escenario.velScroll = std::stoi(velScrollString);
			m_escenario.fondo = m_fondo;
			m_escenario.listaDeElementos = m_listaDeElementos;
		return true;


}
bool ParserNivel::extraerVentana(const pugi::xml_document* doc, bool isLoadingDefault)
{
	bool exito = true;
	pugi::xml_node ventanaNode = doc->child("ventana");
	std::string anchoString = ventanaNode.child("ancho").first_child().value();
	std::string altoString = ventanaNode.child("alto").first_child().value();

	if (!validarNumero(anchoString))
		{
			Logger::Instance()->LOG("Se cargo el ancho de la ventana por default", WARN);
			anchoString = "810";
		}
	if (!validarNumero(altoString))
		{
			Logger::Instance()->LOG("Se cargo el alto de la ventana por default", WARN);
			altoString = "610";
		}

	m_ventana.alto = stoi(altoString);
	m_ventana.ancho = stoi(anchoString);
	return true;


}
bool ParserNivel::extraerAvion(const pugi::xml_document* doc, bool isLoadingDefault)
{
	bool exito = true;
	pugi::xml_node avionNode = doc->child("avion");
	std::string velDesplStr = avionNode.child("velocidadDesplazamiento").first_child().value();
	std::string velDispStr = avionNode.child("velocidadDisparos").first_child().value();
	std::string cdDispStr = avionNode.child("cooldownDisparos").first_child().value();
	std::string avionSprId = avionNode.child("avionSpriteId").first_child().value();
	std::string vueltaSprId = avionNode.child("vueltaSpriteId").first_child().value();
	std::string disparpSprId = avionNode.child("disparosSpriteId").first_child().value();

	if(! validarNumero(velDesplStr))
	{
		Logger::Instance()->LOG("Se cargo la velocidad del avion por default", WARN);
		velDesplStr = "10";
	}
	if(! validarNumero(velDispStr))
	{
		Logger::Instance()->LOG("Se cargo la velocidad del disparo por default", WARN);
		velDispStr = "12";
	}
	if(! validarNumero(cdDispStr))
		{
			Logger::Instance()->LOG("Se cargo el cd del disparo por default", WARN);
			cdDispStr = "300";
		}
	bool found = false;
	std::vector<Sprite> lista =  getListaSprites();
	for(int i=0; i < lista.size(); i++)
	{
		if (avionSprId == lista[i].id)
		{
		  found = true;
		}
	}
	if(!found)
	{
		Logger::Instance()->LOG("Al no tener un id existente entre los sprites, se asignará un sprte default", WARN);
		avionSprId = "default";
	}
	found = false;
	std::vector<Sprite> lista2 =  getListaSprites();
	for(int i=0; i < lista2.size(); i++)
	{
		if (vueltaSprId == lista2[i].id)
		{
		  found = true;
		}
	}
	if(!found)
	{
		Logger::Instance()->LOG("Al no tener un id existente entre los sprites, se asignará un sprte default", WARN);
		vueltaSprId = "default";
	}
	found = false;
	std::vector<Sprite> lista3 =  getListaSprites();
	for(int i=0; i < lista3.size(); i++)
	{
		if (disparpSprId == lista3[i].id)
		{
		  found = true;
		}
	}
	if(!found)
	{
		Logger::Instance()->LOG("Al no tener un id existente entre los sprites, se asignará un sprte default", WARN);
		disparpSprId = "default";
	}



	m_avion.velDespl = std::stoi(velDesplStr);
	m_avion.velDisp = std::stoi(velDispStr);
	m_avion.cdDisp = std::stoi(cdDispStr);
	m_avion.avionSprId = avionSprId;
	m_avion.vueltaSprId = vueltaSprId;
	m_avion.disparoSprId = disparpSprId;

	return true;


}