using UnityEngine;
/// <summary>
/// Trivial script that fills the label's contents gradually, as if someone was typing.
/// </summary>
[RequireComponent
(typeof(UILabel
))] [AddComponentMenu("NGUI/Examples/Typewriter Effect")]
public class TypewriterEffect : IgnoreTimeScale
{
public GameObject eventListener;
public int charsPerSecond = 40;
UILabel mLabel;
string mText;
int mOffset = 0;
float mNextChar = 0f;
void Update ()
{
if (mLabel == null)
{
mLabel = GetComponent<UILabel>();
//mLabel.supportEncoding = false;
mLabel.symbolStyle = UIFont.SymbolStyle.None;
mText = mLabel.font.WrapText(mLabel.text, mLabel.lineWidth / mLabel.cachedTransform.localScale.x, mLabel.maxLineCount, false, UIFont.SymbolStyle.None);
}
if (mOffset < mText.Length)
{
if (mNextChar <= Time.realtimeSinceStartup )
{
charsPerSecond = Mathf.Max(1, charsPerSecond);
// Periods and end-of-line characters should pause for a longer time.
float delay = 1f / charsPerSecond;
char c = mText[mOffset];
if (c == '.' || c == '\n' || c == '!' || c == '?') delay *= 4f;
mNextChar = Time.realtimeSinceStartup + delay;
//if (mText.Substring(mOffset,1)==" ") mOffset+=2;
if (mText.Substring(mOffset, 1)=="[") {
if (mText.Substring(mOffset,2)!="[-") {
mOffset+=8;
} else {
mOffset+=4;
}
}
mLabel.text = mText.Substring(0, ++mOffset);
}
}
else {
if(eventListener) {
eventListener.SendMessage("OnTypewriterDone", SendMessageOptions.DontRequireReceiver);
}
Destroy(this);
}
}
}