コード例 #1
0
    //Recorre las listas de intros y mensajes para añadirlos a los dialogos, con parámetros sobre el diálogo actual
    private void AnyadirDialogueAdd(int IDInteractuable, int IDDialogoActual, int tipoDialogo, ref int numDialogo)
    {
        for (int i = 0; i < intros.Count; i++)
        {
            int prioridad = intros[i].DevuelvePrioridad();
            int ID        = intros[i].DevuelveIDIntro();
            int IDInter   = intros[i].devuelveIDInteractuable();
            int IDDialogo = intros[i].DevuelveIDDialogo();

            Intro intro = Intro.LoadIntro(Manager.rutaIntros + ID.ToString() + ".xml", prioridad);

            //Si la intro forma parte de un grupo y ese grupo ya ha acabado, no es añadida
            if (!Manager.instance.GrupoAcabadoExiste(intro.DevuelveIDGrupo()))
            {
                Dialogo dialogo = Dialogo.BuscarDialogo(IDInter, IDDialogo);

                //Añadimos la intro
                if (dialogo.AnyadirIntro(intro))
                {
                    //Si el NPC al que vamos a añadir la intro es el mismo que el del dialogo actual y estamos en una intro en el dialogo
                    //Comprobamos si tenemos que cambiar el indice de dialogo actual
                    if (IDInteractuable == IDInter && IDDialogoActual == IDDialogo)
                    {
                        //Una vez que sabemos que el NPC es el mismo, podemos comprobar la prioridad del intro actual
                        //Si la prioridad de la intro a añadir es mayor que la actual, movemos el indice
                        if (prioridad > dialogo.intros[numDialogo].DevuelvePrioridad() && tipoDialogo == 0)
                        {
                            numDialogo++;
                        }
                        //No añadimos el diálogo a la cola de objetos, ya que el dialogo actual se serializa al final de la conversación actual
                    }
                    //Si el diálogo de la intro a añadir no es el del diálogo actual
                    //Añadimos el dialogo a la cola
                    else
                    {
                        dialogo.AddToColaObjetos();
                    }

                    if (intro.aDistancia)
                    {
                        GameObject interactuableGO = Manager.instance.GetInteractuable(IDInteractuable);

                        if (interactuableGO != null)
                        {
                            interactuableGO.GetComponent <Interactuable>().CrearDialogoADistanciaArea(dialogo, intro);
                        }
                    }
                }
            }
        }

        for (int i = 0; i < mensajes.Count; i++)
        {
            int ID        = mensajes[i].DevuelveID();
            int IDTema    = mensajes[i].DevuelveIDTema();
            int IDInter   = mensajes[i].DevuelveIDInteractuable();
            int IDDialogo = mensajes[i].DevuelveIDDialogo();

            Mensaje mensaje = Mensaje.LoadMensaje(Manager.rutaMensajes + ID.ToString() + ".xml");

            //Si el mensaje forma parte de un grupo y ese grupo ya ha acabado, no es añadido
            if (!Manager.instance.GrupoAcabadoExiste(mensaje.DevuelveIDGrupo()))
            {
                Dialogo dialogo = Dialogo.BuscarDialogo(IDInter, IDDialogo);

                if (dialogo.AnyadirMensaje(IDTema, mensaje))
                {
                    //Si el dialogo del cual hemos añadido el mensaje no es el actual, añadimos el dialogo a la cola
                    //ya que el dialogo actual se serializa al final de la conversación
                    if (!(IDInteractuable == IDInter && IDDialogoActual == IDDialogo))
                    {
                        dialogo.AddToColaObjetos();
                    }
                }
            }
        }
    }