Пример #1
0
        // Start is called before the first frame update
        void Start()
        {
            chatText  = GetComponentInChildren <ChatText>();
            portraits = GetComponentsInChildren <ChatPortrait>();

            chatText.SetVisibility(false);

            foreach (var portrait in portraits)
            {
                portrait.SetVisibility(false);
            }
        }
Пример #2
0
        private IEnumerator SpeakTask(ChatMessage message)
        {
            // Wait for any current speech to finish.
            while (isSpeaking)
            {
                yield return(null);
            }

            isSpeaking = true;
            var speakingCharacter = portraits.SingleOrDefault(p => p.Player == message.PlayerSpeaking);

            var listeningCharacters = portraits.Where(p => p.Player != message.PlayerSpeaking);

            foreach (var character in listeningCharacters)
            {
                character.SetListener();
            }

            if (speakingCharacter != null)
            {
                speakingCharacter.SetSpeaker();
            }

            chatText.ClearText();
            chatText.gameObject.SetActive(true);
            chatText.SetText(message.Text, CharactersPerMinute);

            while (chatText.IsDisplaying)
            {
                yield return(null);
            }

            yield return(new WaitForSeconds(message.PostDelay));

            if (chatQueue.Count == 0)
            {
                foreach (var character in portraits)
                {
                    character.SetVisibility(false);
                }

                chatText.SetVisibility(false);
            }

            isSpeaking = false;

            message.Callback?.Invoke();

            yield return(null);
        }