예제 #1
0
// тоже самое в пошаговом режиме, предусматривается возможность обратного запуска из обработчика дисплея
// чтобы не делать рекурсивный Talk
// по сути уже не нужно
        private void StepDialogue(Dialogue d, int startphrase, int choice, Action onComplete)
        {
            Person[] P = { d.Pers1, d.Pers2 };
            Phrase   ph;
            int      i = startphrase;

            if (i < d.count)
            {
                if ((ph = d.D_GetPhrase(i, choice)) != null)
                {
                    if (ph.IsChoice())
                    {
                        AskMain(q2(i + 1) ? P[0] : P[1], ph.Ph_GetChoice(), startphrase, d, onComplete);
                        return;
                    }
                    else
                    {
                        Talk(q2(i + 1) ? P[0] : P[1], ph.Ph_GetReplika(MainStory));
                    }
//					if (ph.IsFinal ())
//						break;
                }
            }

            FinishDialogue(onComplete);
        }
예제 #2
0
 private void SetAct(Dialogue d, int pN, Action a1, Action a2)
 {
     d.D_GetPhrase(pN).Ph_InitAct(a1, a2);
 }
예제 #3
0
// запуск диалога; пихаем все строчки Talk сразу, а потом вызываем корутину
// с выбором ответа обрываем исполнение, чтобы продолжить после вызова из менюшки
// делал на скорую, может, нужно переделать, но вроде работает...
        private void StartLinearDialogue(Dialogue d, int startphrase, Action onComplete)
        {
            Phrase ph;
            string replika;

            string[] choice;
            int      i = startphrase, j, link, result;

            Person[] P    = { d.Pers1, d.Pers2 };
            Person   Pers = P[1];

            while (i < d.count)
            {
                link = 0;
                if ((ph = d.D_GetPhrase(i)) != null)
                {
                    if (ph.Actor != null)
                    {
                        Pers = ph.Actor;
                    }
                    if ((replika = ph.Ph_GetReplika(MainStory)) != null)
                    {
                        //Debug.Log ("это фраза из " + ph.Replika.Count + " реплик");
                        result = ph.Ph_GetResult(MainStory);
                        Talk(Pers, replika);
                    }
                    else if ((choice = ph.Ph_GetChoice()) != null)
                    {
                        //Debug.Log ("это вопрос из " + choice.Length + " пунктов");
                        AskMain(Pers, choice, i, d, onComplete);
                        return;
                    }
                    else if ((link = ph.Ph_GetDecision(MainStory)) != 0)
                    {
                        //Debug.Log ("это выбор");
                        i      = link;
                        result = ph.Ph_GetResult(MainStory);
                    }
                    if (ph.IsFinal())
                    {
                        //Debug.Log ("это конец беседы");
                        break;
                    }
                }
                if (link == 0)           // если не десижн, то смотрим переход по схеме диалога
                {
                    if ((j = d.D_GetLink(i, 0)) > 0)
                    {
                        i = j;
                    }
                    else
                    {
                        i++;
                    }
                }
            }

            //Debug.Log ("Аудиенция окончена"); // снимаем флаг аудиенции с персонажа
            P[1].Dismiss();
            FinishDialogue(onComplete);
        }