void Awake()
 {
     instance = this;
 }
    // starts playing
    public bool StartPlaying()
    {
        if (isPlaying)
        {
            return(false);
        }

        isPlaying    = true;
        inicializado = true;
        //para terminar de leer la misma frase
        move_finished = false;

        if (!_vista_previa && !_Movimiento_registrado_play)
        {
            // Movimientos
            Gesture_Action movimiento = Gesture_Action.Instance;
            movimiento.LeerMovimiento(filePath);


            movimiento.Comparar = true;
        }



        // avoid recording an playing at the same time
        if (isRecording && isPlaying)
        {
            isRecording = false;
            Debug.Log("Recording stopped.");
        }

        // stop playing if there is no file name specified
        //if(filePath.Length == 0 || !File.Exists(filePath))
        //{
        //	isPlaying = false;
        //	Debug.LogError("No file to play.");

        //	if(infoText != null)
        //	{
        //		infoText.text = "No file to play.";
        //	}
        //}

        if (isPlaying)
        {
            Debug.Log("Playing started.");
            if (infoText != null)
            {
                infoText.text = "Playing... Say 'Stop' to stop the player.";
            }

            // initialize times
            fStartTime    = fCurrentTime = Time.time;
            fCurrentFrame = -1;

            // open the file and read a line
#if !UNITY_WSA
            TextAsset asset = Resources.Load("movimientos/" + filePath) as TextAsset;
            // convert string to stream
            byte[] byteArray = Encoding.UTF8.GetBytes(asset.text);
            //byte[] byteArray = Encoding.ASCII.GetBytes(contents);
            MemoryStream stream = new MemoryStream(byteArray);

            // convert stream to string

            fileReader = new StreamReader(stream);
#endif
            ReadLineFromFile();

            // enable the play mode
            if (manager)
            {
                manager.maxTrackedUsers = 2;

                if (_registro_comparacion)
                {
                    //para reproducir el movimiento con el usuario a la vez para ver errores
                    manager.EnablePlayMode(true);
                    _registro_comparacion = false;
                }
                else
                {
                    // para reproducir la grabacion y usuario captado con la kinect
                    manager.EnableCompareMode(true);
                }
            }
        }

        return(isPlaying);
    }
    // stops recording or playing
    public void StopRecordingOrPlaying()
    {
        if (isRecording)
        {
            isRecording = false;

            Debug.Log("Recording stopped.");
            if (infoText != null)
            {
                infoText.text = "Recording stopped.";
            }
        }

        if (isPlaying)
        {
            // close the file, if it is playing
            CloseFile();
            isPlaying = false;

            manager.maxTrackedUsers = 1;
            Debug.Log("Playing stopped.");
            Gesture_Action movimiento = Gesture_Action.Instance;
            //se resetea el gesto
            if (_click_buttón)
            {
                Int64 userID = manager ? manager.GetUserIdByIndex(0) : 0;
                manager.ResetGesture(userID, KinectGestures.Gestures.Move);
                inpose = false;



                movimiento.Comparar = false;
                movimiento.infoText_Movimiento.text = "";
                movimiento.cambiar_calibrar_texto("");

                _click_buttón = false;
            }

            play.interactable = true;
            cambiar_movimiento.interactable = true;

            //ref_hijos canvas_iteracion = GameObject.Find("Canvas iteración").GetComponent<ref_hijos>();

            //GameObject.Find("KinectController").GetComponent<KinectGestures>().SetMostrar_Mensaje_Calibrar(true);
            _calibracion = true;

            Canvas_iteracion.GetComponent <ref_hijos>().button_Comparar.SetActive(true);
            Canvas_iteracion.GetComponent <ref_hijos>().button_Cancelar_Comparar.SetActive(false);


            if (infoText != null)
            {
                infoText.text = "Playing stopped.";
            }


            _Movimiento_registrado_play = false;
        }

        if (infoText != null)
        {
            infoText.text = "Say: 'Record' to start the recorder, or 'Play' to start the player.";
        }
    }
    private void Mostrar_Errores_Movimiento()
    {
        int            i   = 1;
        Gesture_Action mov = Gesture_Action.Instance;

        AvatarPlay.GetComponent <huesitos>().Reset_Color_bones();
        this.texto_pizarra.GetComponent <TextMeshProUGUI>().text = "";

        List <string> texto = new List <string>();

        while (i < 25)
        {
            Vector3 vectorplay = cubemanPay.GetComponent <CubemanController>().GetBones()[i].transform.localPosition;
            Vector3 vectorcord = cubemanRecorder.GetComponent <CubemanController>().GetBones()[i].transform.localPosition;

            float playx = vectorplay.x;
            float playy = vectorplay.y;
            float playz = vectorplay.z;


            float cordx = vectorcord.x;
            float cordy = vectorcord.y;
            float cordz = vectorcord.z;



            bool inpose = ((playx <= (cordx + mov.Error_Margin)) && (playx >= (cordx - mov.Error_Margin))) &&
                          ((playy <= (cordy + mov.Error_Margin)) && (playy >= (cordy - mov.Error_Margin))) &&
                          ((playz <= (cordz + mov.Error_Margin)) && (playz >= (cordz - mov.Error_Margin)));

            //huesito rojo  y logica de corrección de movimiento
            if (!inpose)

            {
                AvatarPlay.GetComponent <huesitos>().Paint_Bone_red(i);
                string correccion = "\u2022<indent=3.5em>Mueve  <#F74A05>" + BonetoString[i] + "</color> hacia la ";
                //Se identifica si es derecha o izquierda

                if ((playx - cordx) > 0)
                {
                    //moverse a la izquierda
                    correccion += " <#16B42B>derecha </color>  y ";
                }


                else
                {
                    //moverse a la derecha
                    correccion += " <color=red>izquierda </color> y ";
                }

                //Se identifica hacia delante o hacia atás

                if ((playz - cordz) > 0)
                {
                    //abajo
                    correccion += "<#10B9F6>atrás </color>";
                }
                else
                {
                    //arriba
                    correccion += "<color=purple>adelante </color>";
                }
                //Se identifica arriba o abajo

                if ((playy - cordy) > 0)
                {
                    //abajo
                    correccion += "acompañado de un movimiento<#FC0EF4> descendente.</color></indent>";
                }
                else
                {
                    //arriba
                    correccion += "acompañado de un movimiento<color=blue> ascendente. </color></indent>";
                }



                Debug.Log(correccion);

                if (!texto.Contains(correccion))
                {
                    texto.Add(correccion);
                }
            }

            i++;
        }

        for (int j = 0; j < texto.Count; j++)
        {
            //Texto_correccion.text += texto[j] + "\n";
            this.texto_pizarra.GetComponent <TextMeshProUGUI>().text += texto[j] + "\n";
        }
        if (texto.Count == 0)
        {
            //Texto_correccion.text = "Error en calibración de movimiento intentelo de nuevo." + "\n";
            this.texto_pizarra.GetComponent <TextMeshProUGUI>().text = "Error en calibración de movimiento intentelo de nuevo." + "\n";
        }
    }