Esempio n. 1
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);
        }
Esempio n. 2
0
 public override sealed void StartDialogue(Dialogue d, Action onComplete)
 {
     StartLinearDialogue(d, 0, onComplete);
 }