public void ConversationStarted(Conversation newConversation) { if (newConversation.conversationType == Conversation.ConversationType.MissionDialogue || newConversation.conversationType == Conversation.ConversationType.AmbientDialogue) { _currentConversation = newConversation; foreach (ConversationAction conversationAction in _currentConversation.actions) { if (conversationAction is ConAct_Speak) { ConAct_Speak speakAction = (ConAct_Speak)conversationAction; speakAction.speakStartEvent.AddListener(SpeakStartReceived); speakAction.speakEndEvent.AddListener(SpeakEndReceived); } else if (conversationAction is ConAct_Choice) { ConAct_Choice choiceAction = (ConAct_Choice)conversationAction; choiceAction.speakStartEvent.AddListener(SpeakStartReceived); choiceAction.speakEndEvent.AddListener(SpeakEndReceived); } } } }
protected override void Update() { base.Update(); bool choiceActive = false; if (_currentConversation != null) { if (_currentConversation.currentConversationAction != null) { if (_currentConversation.currentConversationAction is ConAct_Choice) { choiceActive = true; ConAct_Choice choiceAction = (ConAct_Choice)(_currentConversation.currentConversationAction); _speakText.maxVisibleCharacters = _speakText.text.Length; for (int i = 0; i < choiceAction.choiceList.Count; i++) { _choiceObjects[i].SetActive(true); _choiceTexts[i].text = choiceAction.choiceList[i]; _choiceImages[i].color = i == choiceAction.currentChoiceIndex ? Color.yellow : Color.gray; } } else if (_currentConversation.currentConversationAction is ConAct_Speak) { ConAct_Speak speakAction = (ConAct_Speak)(_currentConversation.currentConversationAction); _speakText.maxVisibleCharacters = Mathf.RoundToInt(ExtraMath.Map(speakAction.currentVisibleCharactersRatio, 0, 1, 0, _speakText.text.Length)); Debug.Log(_textAnimator.textInfo.characterCount); if (speakAction.nextButtonVisible) { _nextButton.SetActive(true); } } if (_speakText.maxVisibleCharacters == _speakText.text.Length && !_isTextAnimating) { Debug.Log("animate text"); AnimateText(); } } } if (!choiceActive) { foreach (GameObject choiceObject in _choiceObjects) { choiceObject.SetActive(false); } } if (_speakWindowActive) { _speakWindowActiveFrames = 2; } else { if (_speakWindowActiveFrames > 0) { _speakWindowActiveFrames--; } else { _speakObject.SetActive(false); } } }