//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); }
// 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); }
// 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); }