//-------------------------------------- // Do Speech //-------------------------------------- public void DoSpeech(SpeechNode speech) { if (speech == null) { EndConversation(); return; } m_currentSpeech = speech; // Clear current options ClearOptions(); m_currentSelectedIndex = 0; // Set sprite if (speech.Icon == null) { NpcIcon.sprite = BlankSprite; } else { NpcIcon.sprite = speech.Icon; } // Set font if (speech.TMPFont != null) { DialogueText.font = speech.TMPFont; } else { DialogueText.font = null; } // Set name NameText.text = speech.Name; // Set text if (string.IsNullOrEmpty(speech.Text)) { if (ScrollText) { DialogueText.text = ""; m_targetScrollTextCount = 0; DialogueText.maxVisibleCharacters = 0; m_elapsedScrollTime = 0f; m_scrollIndex = 0; } else { DialogueText.text = ""; DialogueText.maxVisibleCharacters = 1; } } else { if (ScrollText) { DialogueText.text = speech.Text; m_targetScrollTextCount = speech.Text.Length + 1; DialogueText.maxVisibleCharacters = 0; m_elapsedScrollTime = 0f; m_scrollIndex = 0; } else { DialogueText.text = speech.Text; DialogueText.maxVisibleCharacters = speech.Text.Length; } } // Call the event if (speech.Event != null) { speech.Event.Invoke(); } // Play the audio if (speech.Audio != null) { AudioPlayer.clip = speech.Audio; AudioPlayer.volume = speech.Volume; AudioPlayer.Play(); } // Display new options if (speech.Options.Count > 0) { for (int i = 0; i < speech.Options.Count; i++) { UIConversationButton option = GameObject.Instantiate(ButtonPrefab, OptionsPanel); option.InitButton(speech.Options[i]); option.SetOption(speech.Options[i]); m_uiOptions.Add(option); } } else { // Display "Continue" / "End" if we should. bool notAutoAdvance = !speech.AutomaticallyAdvance; bool autoWithOption = (speech.AutomaticallyAdvance && speech.AutoAdvanceShouldDisplayOption); if (notAutoAdvance || autoWithOption) { // Else display "continue" button to go to following dialogue if (speech.Dialogue != null) { UIConversationButton option = GameObject.Instantiate(ButtonPrefab, OptionsPanel); option.SetFollowingAction(speech.Dialogue); m_uiOptions.Add(option); } // Else display "end" button else { UIConversationButton option = GameObject.Instantiate(ButtonPrefab, OptionsPanel); option.SetAsEndConversation(); m_uiOptions.Add(option); } } } SetSelectedOption(0); // Set the button sprite and alpha for (int i = 0; i < m_uiOptions.Count; i++) { m_uiOptions[i].SetImage(OptionImage, OptionImageSliced); m_uiOptions[i].SetAlpha(0); m_uiOptions[i].gameObject.SetActive(false); } SetState(eState.ScrollingText); }
//-------------------------------------- // Do Speech //-------------------------------------- public void DoSpeech(SpeechNode speech) { if (speech == null) { EndConversation(); return; } m_currentSpeech = speech; // Clear current options ClearOptions(); m_currentSelectedIndex = -1; // Set sprite if (speech.Icon == null) { NpcIcon.sprite = BlankSprite; } else { NpcIcon.sprite = speech.Icon; } // Set font if (speech.TMPFont != null) { DialogueText.font = speech.TMPFont; } else { DialogueText.font = null; } // Set name NameText.text = speech.Name; // Set text if (string.IsNullOrEmpty(speech.Text)) { if (ScrollText) { DialogueText.text = ""; m_targetScrollTextCount = 0; DialogueText.maxVisibleCharacters = 0; m_elapsedScrollTime = 0f; m_scrollIndex = 0; } else { DialogueText.text = ""; DialogueText.maxVisibleCharacters = 1; } } else { if (ScrollText) { DialogueText.text = speech.Text; m_targetScrollTextCount = speech.Text.Length + 1; DialogueText.maxVisibleCharacters = 0; m_elapsedScrollTime = 0f; m_scrollIndex = 0; } else { DialogueText.text = speech.Text; DialogueText.maxVisibleCharacters = speech.Text.Length; } //if (Backlog != null) //{ // Backlog.text += speech.Name + ":\n" + speech.Text + "\n\n"; //} } // Call the event //speech.Event?.Invoke(); // Play the audio if (speech.Audio != null) { AudioPlayer.clip = speech.Audio; AudioPlayer.volume = speech.Volume; AudioPlayer.Play(); } // Display new options if (speech.Options.Count > 0) { //StartCoroutine(ShrinkDialogue()); // Decrease spacing when many options are present to prevent options being too small var layout = OptionsPanel.GetComponent <VerticalLayoutGroup>(); if (speech.Options.Count > 3) { layout.spacing = 10; } else { layout.spacing = 20; } for (int i = 0; i < speech.Options.Count; i++) { UIConversationButton option = GameObject.Instantiate(ButtonPrefab, OptionsPanel); option.InitButton(speech.Options[i]); option.SetOption(speech.Options[i]); m_uiOptions.Add(option); } } else { //StartCoroutine(ExpandDialogue()); // Display "Continue" / "End" if we should. //bool notAutoAdvance = !speech.AutomaticallyAdvance; bool autoWithOption = (speech.AutomaticallyAdvance && speech.AutoAdvanceShouldDisplayOption); if (autoWithOption) { // Else display "continue" button to go to following dialogue if (speech.Dialogue != null) { UIConversationButton option = GameObject.Instantiate(ButtonPrefab, OptionsPanel); option.SetFollowingAction(speech.Dialogue); m_uiOptions.Add(option); } // Else display "end" button else { UIConversationButton option = GameObject.Instantiate(ButtonPrefab, OptionsPanel); option.SetAsEndConversation(); m_uiOptions.Add(option); } } } // Auto select first option // SetSelectedOption(0); // Set the button sprite and alpha for (int i = 0; i < m_uiOptions.Count; i++) { m_uiOptions[i].SetImage(OptionImage, OptionImageSliced); m_uiOptions[i].SetAlpha(0); m_uiOptions[i].gameObject.SetActive(false); } SetState(eState.ScrollingText); }