using System.Collections; using UnityEngine; namespace Febucci.UI { /// /// Default TextAnimatorPlayer, which can show letters dynamically (like a typewriter).
/// To enable it, add this component near a one
/// - Base class:
/// - Manual: TextAnimatorPlayers ///
[HelpURL("https://www.textanimator.febucci.com/docs/text-animator-players/")] [AddComponentMenu("Febucci/TextAnimator/TextAnimatorPlayer")] public class TextAnimatorPlayer : Core.TAnimPlayerBase { [SerializeField] [Attributes.CharsDisplayTime] [Tooltip("Wait time for normal letters")] public float waitForNormalChars = .03f; [SerializeField] [Attributes.CharsDisplayTime] [Tooltip("Wait time for ! ? .")] public float waitLong = .6f; [SerializeField] [Attributes.CharsDisplayTime] [Tooltip("Wait time for ; : ) - ,")] public float waitMiddle = .2f; [SerializeField] [Tooltip("-True: only the last punctuaction on a sequence waits for its category time.\n-False: each punctuaction will wait, regardless if it's in a sequence or not")] bool avoidMultiplePunctuactionWait = false; [SerializeField, Tooltip("True if you want the typewriter to wait for new line characters")] bool waitForNewLines = true; [SerializeField, Tooltip("True if you want the typewriter to wait for all characters, false if you want to skip waiting for the last one")] bool waitForLastCharacter = true; protected override float WaitTimeOf(char character) { //avoids waiting for the last character if (!waitForLastCharacter && textAnimator.allLettersShown) return 0; //avoids waiting for multiple times if there are puntuactions near each other if (avoidMultiplePunctuactionWait && char.IsPunctuation(character)) { if (textAnimator.TryGetNextCharacter(out var result)) { if (char.IsPunctuation(result.character)) //next character is punctuation { return waitForNormalChars; } } } //avoids waiting for new lines if (!waitForNewLines && !textAnimator.latestCharacterShown.isVisible) { bool IsUnicodeNewLine(ulong unicode) //Returns true if the unicode value represents a new line { return unicode == 10 || unicode == 13; } //skips waiting for a new line if (IsUnicodeNewLine(textAnimator.latestCharacterShown.textElement.unicode)) return 0; } //character is not before another punctuaction switch (character) { case ';': case ':': case ')': case '-': case ',': return waitMiddle; case '!': case '?': case '.': return waitLong; } return waitForNormalChars; } /// /// Waits any input from the user. /// /// protected override IEnumerator WaitInput() { while (!Input.anyKeyDown) yield return null; } } }