/* * //Metodo toma los 5 TextMesh y asigna las palabras * * Metodo que inicializa las posibles palabras * que se utilizaran para rellenar los huecos * en el texto del poema * Toma los respectivos TextMesh y asigna las palabras * * p = objeto poema que contiene el poema, las palabras validas * y palabras falsas * */ private void InicializarPalabrasPosibles(Poema p) { //Lista con posibles palabras en la escena List <TextMesh> palabrasUi = new List <TextMesh>() { palabra1, palabra2, palabra3, palabra4, palabra5 }; //Lista con palabras verdadera y falsas segun el poema(nivel) List <Palabra> allPalabras = p.palabrasP.Concat(p.falsaspalabras).ToList(); //Contador para iterar por la lista de palabras que forme int cont = 0; while (palabrasUi.Count != 0) //Cilco par asignar random las palabras del poema a los mesh botones { /* * Posicion random en la lista de palabras de las escena * y obtengo Textmesh correspondiente * Asignamos al texto la palabra (segun cont )de mi lista * de palabras ( * */ int pos = Random.Range(0, palabrasUi.Count); TextMesh t = palabrasUi[pos]; t.text = allPalabras[cont].palabra; //Si el objeto t no tiene collider para interaccionar con el trigger if (t.gameObject.GetComponent <BoxCollider>() == null) { //Asignar un collider al objeto para poder arrastrarlo en la Interfaz t.gameObject.AddComponent <BoxCollider>(); //Se dispara cuando choca con otro collider t.GetComponent <Collider>().isTrigger = true; } //Lo pongo en la x original por si la palabra se ha movido ActivarMesh(t); //Elimino el textMesh de la lista para no repetirlo en la sig Iteracion palabrasUi.RemoveAt(pos); //Incremento cont para pasar el siguiente elemento en mi lista de palabras(allPalabras) cont++; } }
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); } } }
//Metodo toma los 5 TextMesh y asigna las palabras private void InicializarPalabrasPosibles(Poema p) { List<TextMesh> palabrasUi = new List<TextMesh>() {Palabra1, Palabra2, Palabra3, Palabra4, Palabra5}; List<Palabra> todaspalabras = p.Palabras.Concat(p.Falsaspalabras).ToList();//Uno las palabras verdaderas y las falsas en una lista int cont = 0;//contador para iterar por la lista de palabras que forme while (palabrasUi.Count!=0)//Cilco par asignar random las palabras del poema a los mesh botones { int pos = Random.Range(0, palabrasUi.Count);//Posicion random en la lista de palabras TextMesh t = palabrasUi[pos];//Obtengo el Textmesh que esta en la lista t.text = todaspalabras[cont].palabra;//Asigno al texto la primera palabra de mi lista de palabras if (t.gameObject.GetComponent<BoxCollider>()==null) { t.gameObject.AddComponent<BoxCollider>();//Asignar un collider al objeto para poder arrastrarlo en la Interfaz t.GetComponent<Collider>().isTrigger = true;//Se dispara cuando choca con otro collider } ActivarMesh(t);//Lo pongo en la x original por si no estaba ahi palabrasUi.RemoveAt(pos);//Elimino el textMesh de la lista para no repetirlo en la sig Iteracion cont++;//Incremento cont para pasar el siguiente elemento en mi lista de palabras } }
public void CheckAndSet() { //Obtengo las lineas que estan en pantalla en ese momento 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() == "")) { _modalPanel.ShowPoema("Hay espacios sin completar.", TextoPema, Aceptar, Cancelar, _modalPanel.CerrarPanel); return; //No estan completas retorno falso para q el jugador termine de completar el poema } // Si todas estan completas Obtengo el poema actual Poema poemaActual = _controladorPoema.Poemas[_controladorPoema._poemaactual]; PoemaActual = poemaActual; //Obtengo las palabras correctas del poema las ordeno por su posicion para asegurar el orden List<Palabra> lineasPema = poemaActual.Palabras.OrderBy(a => a.posicion).ToList(); bool bandera = true; //para controlar si se resolvieron todos los poemas string poema = ""; //Guardar texto del poema para mostrarlo for (int i = 0; i < lineasenInterfaz.Count; i++) { ManejadorLinea manejador = lineasenInterfaz[i].GetComponent<ManejadorLinea>(); //Obtengo el script manejador para cada linea poema += manejador.PintarPalabra(lineasenInterfaz[i].text, "#008000ff") + "\n"; if (manejador.ContienePalabraDeResp()) { if (manejador.GetActualPuesta() == poemaActual.GetPalabradeLina(lineasPema, i).palabra) //Si la palabra que tiene puesta coincide con la que le toca en el poema { manejador.SetCorrectWord("#008000ff"); //Pongo la palabra en Coorecta asignandole un nuevo color, verde en este caso } else { bandera = false; IntentosValue--; _incorgullo = false; SetIntentos(IntentosValue); if (IntentosValue == 0) //Si ya ha agotado sus intentos significa que fallo el poema hay que mostrar el otro opema y resetear los intentos { if (_controladorPoema._poemaactual <= 2) { if (lastPoema == false) { IntentosValue = 3; SetIntentos(3); CheckAYuda(); //Si utilizo la ayuda la reseteo para el siguiente poema DecDiamantes();//Le quito un diamante fallo el poema } if (_controladorPoema._poemaactual == 2) { lastPoema = true; _modalPanel.ShowPoema("<color=red>Poema Fallido</color>\n" + GetCorrectPoema(), TextoPema, Aceptar, Cancelar,_modalPanel.CerrarPanel); } if (_controladorPoema._poemaactual <2) { _controladorPoema._poemaactual++; _modalPanel.ShowPoema("<color=red>Poema Fallido</color>\n" + GetCorrectPoema(), TextoPema, Aceptar, Cancelar, _controladorPoema.SetUI); } } } } } } if (bandera) { if (_incdiamantel) { if (_controladorPoema._poemaactual == 2) _incdiamantel = false; else { _diamantes++; UpdateTextMesh(Diamantes, _diamantes.ToString()); } } if (_controladorPoema._poemaactual < 2) { IntentosValue = 3; SetIntentos(IntentosValue); _controladorPoema._poemaactual++; CheckAYuda(); _modalPanel.ShowPoema("<color=blue>Correcto</color>\n"+poema, TextoPema, Aceptar, Cancelar, _controladorPoema.SetUI); } else { if (_incorgullo) { IncOrgullo(); _incorgullo = false; } IntentosValue = 0; SetIntentos(IntentosValue); _modalPanel.ShowPoema("<color=blue>Correcto</color>\n" + poema, TextoPema, Aceptar, Cancelar, _controladorPoema.SetUI); } } }