/* * Metodo que se llama una vez cada frame para * cada collider que esta en contacto con el trigger * * * * */ private void OnTriggerStay(Collider other) { //Inicializamos _soltando = false; //Si el collider con el que choca es una linea if (other.name.Contains("Linea")) { /* * Obtengo el TextMesh del objeto que colisiono * a traves de una pequeña consulta Linq * */ TextMesh linea = FindObjectsOfType <TextMesh>().First(a => a.name == other.name); //Obtengo el objeto que creara la linea ManejadorLinea manejadorLinea = linea.GetComponent <ManejadorLinea>(); /* * Si suelta el clic * */ if (Input.GetMouseButtonUp(0)) //Si suelta el clic { //Caso 1:Si la linea(Ui en escena) contiene _ (significa que no hay palabra puesta = (vacio)) if (manejadorLinea.LineaDisponible()) { //Encontrar la posicion de la 1ra _ (vacio) int posicion = manejadorLinea.FindFirst_(); //Agrego la palabra a la linea donde esten las __ manejadorLinea.PutText(gameObject.GetComponent <TextMesh>(), posicion); //Agrego la palabra a la linea donde esten las __ manejadorLinea.Remove_(); } //Caso 2 Si la linea tiene palabras que ya han sido puestas else if (manejadorLinea.ContienePalabraDeResp()) { //Si la linea tiene color rojo es q tiene palabras puestas /* * Obtengo la palabra antigua(donde quiero poner la nueva) * y coloco la palabra nueva * La palabra antigua la devuelvo junto a las otras palabras * por colocar * * */ string oldword = manejadorLinea.FindandReplaceRedWord(gameObject.GetComponent <TextMesh>().text); //Devolvemos la palabra a su sitio BajarPalabra(oldword); } _soltando = true; } } }
private void Help() { Poema poemaActual = _controladorPoema._poemas[_controladorPoema.nivelPoema]; Debug.Log("Entre a Help"); /* * * 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> lineas = FindObjectsOfType <TextMesh>().Where(a => a.name.Contains("Linea")).OrderBy(a => a.name).ToList(); int cont = 0; //Para saber en que linea estoy foreach (var l in lineas) { ManejadorLinea m = l.GetComponent <ManejadorLinea>(); Debug.Log("var l in lineas"); if (m.LineaDisponible() || m.GetPalabraInsegura()) { Debug.Log("Entro IF () ()"); //Recorro la lista de palabras del poema donde estoy foreach (var p in poemaActual.palabrasP) { Debug.Log("var p in poemaActual.palabrasP)"); //Si la popsicion de la palabra es de la linea donde estoy if (p.posicion == cont) { Debug.Log("Entro IF"); ControladorPalabra cp; GameObject o; //Si hay una palabra puesta la cambio o la marco como correcta if (m.GetActualPuesta() != "") { //Aguardar la que esta puesta antes de cambiarla o = FindObjectsOfType <TextMesh>().First(a => a.text == m.GetActualPuesta()).gameObject; Debug.Log(o.GetComponent <TextMesh>().text); //Cambia la palabra y marco la correcta m.FindandReplaceRedWord(p.palabra); m.SetCorrectWord("#008000ff"); //Quitar la palara correcta de la lista y bajar la que habia GameObject correcta = FindObjectsOfType <TextMesh>().First(a => a.text == p.palabra).gameObject; cp = o.GetComponent <ControladorPalabra>(); //Colocamos las palabra a sus posiciones cp.SubirPalabra(correcta); cp.BajarPalabra(o.GetComponent <TextMesh>().text); //Bajando la que estaba puesta } else //Si no hay la pongo { Debug.Log("Entro ELSE"); //m.PutText(p.palabra,m.FindFirst_()); m.Remove_(); m.SetCorrectWord("#008000ff"); //Desactivando la palabra para que no la pueda seleccionar mas o = FindObjectsOfType <TextMesh>().First(a => a.text == p.palabra).gameObject; cp = o.GetComponent <ControladorPalabra>(); cp.SubirPalabra(o); } Debug.Log("Decremento Ayuda"); numAyuda--; UpdateTextMesh(ayudaT, numAyuda.ToString()); DecDiamantes(); break; } } break; } cont++; } }
/* * 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); } } }