/* * Metodo para manejar las posiciones de los objetos * que estan siendo arrastrados en la escena * */ public void CheckAndSet() { /* * * Obtengo una lista TextMesh de los elementos vacio * "_" donde se deben de poner las palabras * en el poema con una consulta Linq para obtener las lineas y ordenarlas * segun el orden en pantalla * */ List <TextMesh> lineasEnInterfaz = FindObjectsOfType <TextMesh>().Where(a => a.name.Contains("Linea")).OrderBy(a => a.name).ToList(); if (lineasEnInterfaz.Select(l => l.GetComponent <ManejadorLinea>()).Any(m => m.GetActualPuesta() == "")) { //Los sitios vacios "_" no estan completos _modalPanel.ShowPoema("Hay espacios sin completar." + "\n" + "Rellena todos los huecos", textoPoema, Aceptar, Cancelar, _modalPanel.CerrarPanel); return; } // Si todas estan completas Obtengo el poema actual Poema poemaActual = _controladorPoema._poemas[_controladorPoema.nivelPoema]; //Obtengo las palabras correctas del poema las ordeno por su posicion para asegurar el orden List <Palabra> lineasOkPoema = poemaActual.palabrasP.OrderBy(a => a.posicion).ToList(); //Bandera para controlar si se resolvieron todos los poemas bool bandera = true; //Guardar texto del poema para mostrarlo string poemaTexto = ""; /* * Recorro todos los sitios vacios "_" * * */ for (int i = 0; i < lineasEnInterfaz.Count; i++) { //Obtengo el script manejador para cada linea ManejadorLinea manejador = lineasEnInterfaz[i].GetComponent <ManejadorLinea>(); //Voy guardando las lineas del poema poemaTexto += manejador.PintarPalabra(lineasEnInterfaz[i].text, "#008000ff") + "\n"; //Comprobamos si hay una palabra puesta en el TextMesh if (manejador.ContienePalabraDeResp()) { //Si la palabra que tiene puesta coincide con la que le toca en el poema if (manejador.GetActualPuesta() == poemaActual.GetPalabradeLinea(lineasOkPoema, i).palabra) { //Palabra correcta, se asigna color acierto, verde en este caso manejador.SetCorrectWord("#008000ff"); } else { //Actualizamos variables bandera = false; _intentos--; _incorgullo = false; //Actualizamos TextMesh de la escena SetIntentos(_intentos); //Si ya ha agotado sus intentos significa que fallo el poema hay que mostrar el otro opema y resetear los intentos /* * Si hay 0 intentos * significa que ha fallado en el poema (nivel) * Mostramos el siguiente poema (nivel) * y reiniciamos variable intentos * */ if (_intentos == 0) { if (_controladorPoema.nivelPoema <= 2) { _intentos = 3; SetIntentos(_intentos); //Aumentamos el nivel (poema) //_controladorPoema.nivelPoema++; IncNivel(); //Si utilizo la ayuda la reseteo para el siguiente poema CheckAyuda(); //Le quito un diamante fallo el poema DecDiamantes(); _modalPanel.ShowPoema("Tienes Tres errores. Poema Fallido." + "\n" + "Has perdido este nivel", textoPoema, Aceptar, Cancelar, _controladorPoema.SetUI); } } } } } /* * Si se resolvieron todos * los poemas, tratamos los casos * * * */ if (bandera) { if (_incdiamantel) { if (_controladorPoema.nivelPoema == 2) { _incdiamantel = false; } else { diamantes++; UpdateTextMesh(diamantesT, diamantes.ToString()); } } if (_controladorPoema.nivelPoema < 2) { _intentos = 3; SetIntentos(_intentos); //Preparo el siguiente nivel (poema) //_controladorPoema.nivelPoema++; IncNivel(); CheckAyuda(); _modalPanel.ShowPoema(poemaTexto, textoPoema, Aceptar, Cancelar, _controladorPoema.SetUI); } else { if (_incorgullo) { IncOrgullo(); _incorgullo = false; } _intentos = 0; SetIntentos(_intentos); _modalPanel.ShowPoema(poemaTexto, textoPoema, Aceptar, Cancelar, _modalPanel.CerrarPanel); } } }