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