/*
     * 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;
            }
        }
    }
    /*
     * 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);
            }
        }
    }