コード例 #1
0
    //What happens when a widget was clicked?
    public void OnWidgetClick(Widget widget)
    {
        widget.Disable();

        AppendExcluded(widget);

        DialogMenu next_menu;

        //Widget requires a halt? Then wait for action
        if ((widget as DialogWidget).halt_until_good_action)
        {
            current_menu.dialog_tree_state = DialogTreeState.Action;
        }

        //If we exhausted all choices, jump straight to the next menu
        if (current_menu.AllWidgetsDisabled())
        {
            next_menu = current_menu.orig_next_menu;

            //Halt at end? Wait for action
            if (current_menu.halt_at_end)
            {
                current_menu.dialog_tree_state = DialogTreeState.Action;
            }
        }
        //Otherwise:
        else
        {
            //Go to the selected widget's destination
            next_menu = (widget as DialogWidget).DialogMenu;
            //If that destination is a new menu: disable all current widgets.
            if (next_menu != current_menu)
            {
                current_menu.DisableAllWidgets();
            }
        }

        //Set the current menu's subtitle to the widget's response
        subtitle.SetText((widget as DialogWidget).response);

        last_response = (widget as DialogWidget).response;

        //Change it's audio clip to the new one
        current_menu.SetDialogClip((widget as DialogWidget).audio_clip, test_audio_source, (widget as DialogWidget).animationClip, animatedCharacterName);

        PrepareChangeMenu(next_menu);
    }
コード例 #2
0
    // Use this for initialization
    void Start()
    {
        menu_position = get_menu_position();

        //Guard against default bad menu scale
        if(menu_scale == Vector3.zero){ menu_scale = Vector3.one; }

        //Load all tea dialog clips
        Object[] objs = Resources.LoadAll("AudioClips/TeaDialog/DialogClips");
        clips = new List<AudioClip>();
        foreach(Object obj in objs)
        {
            AudioClip clip = obj as AudioClip;
            clips.Add(clip);
        }

        //Record all good responses clips
        objs = Resources.LoadAll("AudioClips/TeaDialog/GoodResponses");
        good_response_clips = new List<AudioClip>();
        foreach(Object obj in objs)
            good_response_clips.Add(obj as AudioClip);

        //Record all bad responses clips
        objs = Resources.LoadAll("AudioClips/TeaDialog/BadResponses");
        bad_response_clips = new List<AudioClip>();
        foreach(Object obj in objs)
            bad_response_clips.Add(obj as AudioClip);

        excluded_choices = new List<string>();

        SetResponsesFromXML();

        subtitle = GetComponentInChildren<SubtitleWidget>();

        if(!subtitle)
        {
            Debug.Log("Error: no subtitle");
            Destroy(gameObject);
        }

        if(generate_static_tree)
        {
            //Get all the menus attached. (Don't attach any if you want to dynamically create the tree;
            //this is probably always the case except when debugging.
            DialogMenu[] amenus = GetComponentsInChildren<DialogMenu>();
            foreach(DialogMenu menu in amenus)
            {
                menus.Add(menu);

                foreach(Widget w in menu.widgets)
                {
                    //Debug.Log ("added widget " + w.name + " of menu " + menu.name);
                    w.OnWidgetClick += OnWidgetClick;
                }
            }
        }
        else
        {
            CreateTreeFromXML();

            for(int i=0;i<menus.Count;i++)
            {
                menus[i].tree = this;

                //Neatly arrange the menu's widgets
                menus[i].ArrangeWidgets();

                foreach(Widget w in menus[i].widgets)
                {
                    w.OnWidgetClick += OnWidgetClick;
                    ((DialogWidget)w).DialogMenu = GetChoiceMenuFromName(((DialogWidget)w).choicemenu_name);
                }

                if(menus[i].dialog_tree_state == DialogTreeState.Wait)
                {
                    menus[i].OnEndCond += OnEndCond;
                }

                //All menu's next menus are the ones that come after them in the XML
                if(i < menus.Count - 1)
                {
                    menus[i].next_menu = menus[i+1];
                    menus[i].orig_next_menu = menus[i+1];
                }

            }

            if(Settings.debug && Settings.menu_to_jump_to != "")
                current_menu = GetChoiceMenuFromName(Settings.menu_to_jump_to);
            else
                current_menu = menus[0];
        }

        subtitle.SetText(current_menu.original_prompt);
    }
コード例 #3
0
    // Use this for initialization
    void Start()
    {
        menu_position = get_menu_position();

        //Guard against default bad menu scale
        if (menu_scale == Vector3.zero)
        {
            menu_scale = Vector3.one;
        }

        //Load all tea dialog clips
        Object[] objs = Resources.LoadAll("AudioClips/TeaDialog/DialogClips");
        clips = new List <AudioClip>();
        foreach (Object obj in objs)
        {
            AudioClip clip = obj as AudioClip;
            clips.Add(clip);
        }

        //Record all good responses clips
        objs = Resources.LoadAll("AudioClips/TeaDialog/GoodResponses");
        good_response_clips = new List <AudioClip>();
        foreach (Object obj in objs)
        {
            good_response_clips.Add(obj as AudioClip);
        }

        //Record all bad responses clips
        objs = Resources.LoadAll("AudioClips/TeaDialog/BadResponses");
        bad_response_clips = new List <AudioClip>();
        foreach (Object obj in objs)
        {
            bad_response_clips.Add(obj as AudioClip);
        }

        excluded_choices = new List <string>();

        SetResponsesFromXML();

        subtitle = GetComponentInChildren <SubtitleWidget>();

        if (!subtitle)
        {
            Debug.Log("Error: no subtitle");
            Destroy(gameObject);
        }

        if (generate_static_tree)
        {
            //Get all the menus attached. (Don't attach any if you want to dynamically create the tree;
            //this is probably always the case except when debugging.
            DialogMenu[] amenus = GetComponentsInChildren <DialogMenu>();
            foreach (DialogMenu menu in amenus)
            {
                menus.Add(menu);

                foreach (Widget w in menu.widgets)
                {
                    //Debug.Log ("added widget " + w.name + " of menu " + menu.name);
                    w.OnWidgetClick += OnWidgetClick;
                }
            }
        }
        else
        {
            CreateTreeFromXML();

            for (int i = 0; i < menus.Count; i++)
            {
                menus[i].tree = this;

                //Neatly arrange the menu's widgets
                menus[i].ArrangeWidgets();

                foreach (Widget w in menus[i].widgets)
                {
                    w.OnWidgetClick += OnWidgetClick;
                    ((DialogWidget)w).DialogMenu = GetChoiceMenuFromName(((DialogWidget)w).choicemenu_name);
                }

                if (menus[i].dialog_tree_state == DialogTreeState.Wait)
                {
                    menus[i].OnEndCond += OnEndCond;
                }

                //All menu's next menus are the ones that come after them in the XML
                if (i < menus.Count - 1)
                {
                    menus[i].next_menu      = menus[i + 1];
                    menus[i].orig_next_menu = menus[i + 1];
                }
            }

            if (Settings.debug && Settings.menu_to_jump_to != "")
            {
                current_menu = GetChoiceMenuFromName(Settings.menu_to_jump_to);
            }
            else
            {
                current_menu = menus[0];
            }
        }

        subtitle.SetText(current_menu.original_prompt);
    }