void SaySomething(SpeechDistances distance, BuddySpeechData.SpeechData speechData) { if (_activeTextRoutine != null) { StopAllSpeech(); } switch (distance) { case SpeechDistances.CloseBy: _activeTextRoutine = StartCoroutine(SpeechRoutine(speechData, _closeByTextDisplayLeft, _closeByTextDisplayRight)); break; case SpeechDistances.FarAway: _activeTextRoutine = StartCoroutine(SpeechRoutine(speechData, _farAwayTextDisplay)); break; } }
IEnumerator SpeechRoutine(BuddySpeechData.SpeechData speechData, params TextMeshPro[] displays) { foreach (TextMeshPro display in displays) { display.gameObject.SetActive(true); } for (int i = 0; i < speechData.texts.Length; i++) { foreach (TextMeshPro display in displays) { display.text = speechData.texts[i]; } float waitTime = speechData.texts[i].Length * _secondsPerCharacter; yield return(new WaitForSeconds(waitTime)); } StopAllSpeech(); _cooldownTimer = speechData.cooldownTime; }