Exemplo n.º 1
0
        void Start()
        {
            if (dialogView == null)
            {
                dialogView = FindObjectOfType <DialogViewer>();
            }
            if (dict == null)
            {
                dict = GetComponentInChildren <ScriptedDictionary>();
            }
            Dialog[] dialogs;
            //NonStandard.Show.Log(knownAssets.JoinToString(", ", ta => ta.name));
            //NonStandard.Show.Log(root.name+":" + root.text.Length);
            Tokenizer tokenizer = new Tokenizer();

            if (dict != null)
            {
                Global.GetComponent <ScriptedDictionaryManager>().SetMainDicionary(dict);
            }
            try {
                CodeConvert.TryParse(root.text, out dialogs, dict.Dictionary, tokenizer);
                tokenizer.ShowErrorTo(NonStandard.Show.Error);
                if (dialogs == null)
                {
                    return;
                }
                //NonStandard.Show.Log("dialogs: [" + d.Stringify(pretty:true)+"]");
                this.dialogs.AddRange(dialogs);
                ResolveTemplatedDialogs(this.dialogs);
            } catch (System.Exception e) {
                NonStandard.Show.Log("~~~#@Start " + e);
            }
            //NonStandard.Show.Log("finished initializing " + this);
            //NonStandard.Show.Log(this.dialogs.JoinToString(", ", dialog => dialog.name));
            // execute all "__init__" dialogs
            ScriptedDictionaryManager m = Global.Get <ScriptedDictionaryManager>();
            object standardScope        = m.Main;     //Commander.Instance.GetScope();

            for (int i = 0; i < this.dialogs.Count; ++i)
            {
                Dialog dialog = this.dialogs[i];
                if (!dialog.name.StartsWith("__init__"))
                {
                    continue;
                }

                //NonStandard.Show.Log("initializing "+dialog.name);
                Tokenizer tok = new Tokenizer();
                dialog.ExecuteCommands(tok, standardScope);
                if (tok.HasError())
                {
                    tok.ShowErrorTo(NonStandard.Show.Warning);
                }
            }
            //NonStandard.Show.Log(standardScope.Stringify(pretty: true));
        }
Exemplo n.º 2
0
        public void SetDialog(object src, Tokenizer tok, Dialog dialog, UiPolicy uiPolicy)
        {
            if (!initialized)
            {
                Init();
            }
            bool isScrolledAllTheWayDown = !scrollRect.verticalScrollbar.gameObject.activeInHierarchy ||
                                           scrollRect.verticalNormalizedPosition < 1f / 1024; // keep scrolling down if really close to bottom

            switch (uiPolicy)
            {
            case UiPolicy.StartOver: RemoveDialogElements(); break;

            case UiPolicy.DisablePrev: DeactivateDialogChoices(); break;

            case UiPolicy.Continue: break;
            }
            if (dialog == null)
            {
                tok.AddError("missing dialog"); return;
            }
            if (dialog.options != null)
            {
                for (int i = 0; i < dialog.options.Length; ++i)
                {
                    Dialog.DialogOption opt = dialog.options[i];
                    //NonStandard.Show.Log("checking opt " + NonStandard.Show.Stringify(opt, false));
                    ScriptedDictionaryManager m = Global.Get <ScriptedDictionaryManager>();
                    if (opt.Available(tok, m.Main))
                    {
                        AddDialogOption(opt, isScrolledAllTheWayDown);
                        //NonStandard.Show.Log("added" + NonStandard.Show.Stringify(opt, false));
                    }
                    else
                    {
                        //NonStandard.Show.Log("ignored" + NonStandard.Show.Stringify(opt, false));
                    }
                }
            }
            ShowErrors(tok.errors);
            onDialog?.Invoke();
        }