Exemplo n.º 1
0
        void Start()
        {
            // Set text
            TMP_Text textMesh = GetComponent <TMP_Text>();

            textMesh.text = "DETERMINATION";

            CharTweener tweener = textMesh.GetCharTweener();

            for (int i = 0; i < tweener.CharacterCount; i++)
            {
                // Move characters in a circle
                Tween circleTween = tweener.DOMoveCircle(i, 0.05f, 0.5f)
                                    .SetLoops(-1, LoopType.Restart);

                // Fade character color between yellow and white
                Tween colorTween = tweener.DOColor(i, Color.yellow, 0.5f)
                                   .SetLoops(-1, LoopType.Yoyo);

                // Offset animations based on character index in string
                float timeOffset = (float)i / tweener.CharacterCount;
                circleTween.fullPosition = timeOffset;
                colorTween.fullPosition  = timeOffset;
            }
        }
        private Sequence BounceIn(TMP_Text text, float distance = 50, int?charsAhead = null)
        {
            Sequence    textSequence = DOTween.Sequence();
            CharTweener tweener      = text.GetCharTweener();

            int count = charsAhead ?? tweener.CharacterCount;

            for (int i = 0; i < count; i++)
            {
                tweener.SetAlpha(i, 0);
                tweener.SetLocalEulerAngles(i, Vector3.forward * 45);
                tweener.SetLocalScale(i, 1);
                tweener.ResetPosition(i);
                tweener.UpdateCharProperties();
            }

            for (int i = 0; i < count; i++)
            {
                Sequence charSequence = DOTween.Sequence();
                charSequence.Insert(0, tweener.DOFade(i, 1, 1));
                charSequence.Insert(0, tweener.DOOffsetMoveY(i, distance, 0.25f).SetEase(Ease.OutCubic));
                charSequence.Insert(0.25f, tweener.DOOffsetMoveY(i, 0, 0.75f).SetEase(Ease.OutBounce));
                charSequence.Insert(0.25f, tweener.DOLocalRotate(i, Vector3.zero, 0.75f).SetEase(Ease.OutBounce));
                textSequence.Insert((float)i / count, charSequence);
            }

            textSequence.SetTarget(text);
            return(textSequence);
        }
    public void UpdatePrompt(StoryText text, Action <int> callback, string characterIndex = "")
    {
        textMeshPro.gameObject.SetActive(true);
        button.enabled   = true;
        textMeshPro.text = text.ProcessText();
        SetTextSettings(text);

        if (GameState.Instance.characters.ContainsKey(characterIndex))
        {
            Character target = GameState.Instance.characters[characterIndex];
            GetComponent <InfoView>().SetInfo(target);
        }

        List <Color> ColorMapping = text.MapColor(attributesLookup);
        CharTweener  _tweener     = textMeshPro.GetCharTweener();

        var sequence = DOTween.Sequence();

        for (var i = 0; i < textMeshPro.text.Length; i++)
        {
            _tweener.DOColor(i, ColorMapping[i], 0.1f);
        }

        ActivateButton(text.settings, callback);
    }
Exemplo n.º 4
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            if (!Application.isPlaying)
            {
                return;
            }

            if (textMesh == null)
            {
                textMesh    = playerData as TextMeshProUGUI;
                charTweener = textMesh.GetCharTweener();

                if (!textMesh.gameObject.activeInHierarchy)
                {
                    return;
                }
            }

            if (!Application.isPlaying)
            {
                // PrepareTween(playable);
                // DOTweenEditorPreview.PrepareTweenForPreview(sequence, true, true, false);
                // sequence.SetUpdate(UpdateType.Manual);
                // DOTweenEditorPreview.Start();
                // sequence.Goto((float)playable.GetTime());
                // DOTween.ManualUpdate(0, 0);

                return;
            }

            Play(playable);
        }
Exemplo n.º 5
0
        // CharTweener black magic happens here.
        private IEnumerator AnimateText()
        {
            CharTweener charTweener = text.GetCharTweener();

            Tween[] resets = GetResetTweens(charTweener);
            foreach (KeyValuePair <TextEffect, MatchCollection> pair in effectSubstrings)
            {
                foreach (Match match in pair.Value)
                {
                    for (int i = match.Index; i < (match.Index + match.Length); i++)
                    {
                        resets[i].Kill();

                        var timeOffset = Mathf.Lerp(0, 1, i / (float)(text.text.Length - 1));

                        Tween tween = pair.Key.DoEffect(i, charTweener);
                        currentEffects.Add(tween);

                        tween.fullPosition += timeOffset;
                    }
                }
            }

            for (int i = 0; i < text.text.Length; i++)
            {
                // Otherwise we'll linger too long on zero width spaces
                while (i < text.text.Length && text.text[i] == ZERO_WIDTH_SPACE)
                {
                    i++;
                }
                text.maxVisibleCharacters = (i + 1);
                yield return(null);
            }
        }
Exemplo n.º 6
0
    async void Start()
    {
        text = GetComponent <TMP_Text>();
        await new WaitUntil(() => text.text.Length > 0);
        tweener = text.GetCharTweener();

        ApplyTweenToLine(BubblyText);
    }
Exemplo n.º 7
0
 public void Start()
 {
     _tweener = Target.GetCharTweener();
     ApplyTweenToLine(0, Tween1);
     ApplyTweenToLine(1, Tween2);
     ApplyTweenToLine(2, Tween3);
     ApplyTweenToLine(3, Tween4);
 }
        private Tween TweenText(string childName, TextTweenOutput output)
        {
            TMP_Text    textMesh = currentSlide.Find(childName).GetComponent <TMP_Text>();
            CharTweener tweener  = textMesh.GetCharTweener();
            Tween       tween    = output(textMesh, tweener);

            tween.SetId(currentSlide);
            return(tween);
        }
        private void TweenChars(string childName, CharTweenOutput output)
        {
            TMP_Text    textMesh = currentSlide.Find(childName).GetComponent <TMP_Text>();
            CharTweener tweener  = textMesh.GetCharTweener();

            for (int charIndex = 0; charIndex < tweener.CharacterCount; charIndex++)
            {
                Tween tween = output(textMesh, tweener, charIndex);
                tween.SetId(currentSlide);
                tween.fullPosition = Mathf.Lerp(0, tween.Duration(includeLoops: false), charIndex / (float)tweener.CharacterCount);
            }
        }
Exemplo n.º 10
0
 // Reset state between runs so we don't have random colors from last call everywhere
 private Tween[] GetResetTweens(CharTweener charTweener)
 {
     Tween[] resets = new Tween[text.text.Length];
     for (int i = 0; i < text.text.Length; i++)
     {
         resets[i] =
             DOTween.Sequence()
             .Append(charTweener.DOColor(i, Color.white, 0))
             .Append(charTweener.DOCircle(i, 0, 0));
     }
     return(resets);
 }
    public void SetTextSettings(StoryText text)
    {
        textMeshPro.fontStyle = text.settings.strikethrough ? FontStyles.Strikethrough : FontStyles.Normal;
        CharTweener _tweener = textMeshPro.GetCharTweener();

        shakeSequence?.Kill();
        shakeSequence = DOTween.Sequence();

        for (var i = 0; i < textMeshPro.textInfo.characterCount; i++)
        {
            _tweener.DOShakePosition(i, 1, text.settings.shake, 50, 90, false, false)
            .SetLoops(-1, LoopType.Restart);
        }
    }
Exemplo n.º 12
0
        private Sequence Drift(TMP_Text text, float strength = 2, int?charsAhead = null)
        {
            Sequence    textSequence = DOTween.Sequence();
            CharTweener tweener      = text.GetCharTweener();

            int count = charsAhead ?? tweener.CharacterCount;

            for (int i = 0; i < count; i++)
            {
                textSequence.Insert(0, tweener.DODriftPosition(i, Vector3.one * strength, Vector3.one * 0.5f, 5));
            }

            textSequence.SetId(driftTweenId);
            return(textSequence);
        }
Exemplo n.º 13
0
        private void Name_OnValueChanged(string value)
        {
            if (value.Length > lastNameValue.Length)
            {
                CharTweener tweener = NameInput.textComponent.GetCharTweener();
                for (int i = lastNameValue.Length; i < value.Length; i++)
                {
                    tweener.SetLocalScale(i, Vector3.one);
                    NameInput.textComponent.GetCharTweener().DOPunchScale(i, Vector3.up * 0.25f, 0.5f);
                }
            }

            lastNameValue = value;
            UpdateCharLimitPrompt();
        }
    private Sequence AnimatePerCharacter(StoryText text, Action <int> callback, string characterIndex = "")
    {
        textMeshPro.color = Color.clear;
        textMeshPro.text  = text.ProcessText();

        List <Color> ColorMapping = text.MapColor(attributesLookup);
        CharTweener  _tweener     = textMeshPro.GetCharTweener();

        SetTextSettings(text);

        SoundEffectProfile textBlip = defaultTextTic;

        if (characterIndex != "")
        {
            textBlip = attributesLookup.GetCharacterAttributes(characterIndex).soundPing;
        }

        var sequence = DOTween.Sequence();

        for (var i = 0; i < textMeshPro.text.Length; i++)
        {
            var timeOffset   = Mathf.Lerp(0, 1, i / (float)(textMeshPro.text.Length + 1));
            var charSequence = DOTween.Sequence();

            if ((i % 2 == 0 && textMeshPro.text.Length < 20) || i % 4 == 0)
            {
                charSequence.AppendCallback(() => textBlip?.Play());
            }

            charSequence.Join(_tweener.DOColor(i, ColorMapping[i], 0.01f))
            .Join(_tweener.DOScale(i, 0, 0.01f).From());

            if (i == textMeshPro.text.Length - 1)
            {
                charSequence.AppendInterval(0.1f)
                .AppendCallback(() => {
                    ActivateButton(text.settings, callback);
                });
            }

            sequence.Insert(timeOffset * text.settings.speed, charSequence);
        }

        return(sequence);
    }
Exemplo n.º 15
0
        private Sequence ScaleOut(TMP_Text text, float distance = 100, int?charsAhead = null)
        {
            Sequence    textSequence = DOTween.Sequence();
            CharTweener tweener      = text.GetCharTweener();

            int count = charsAhead ?? tweener.CharacterCount;

            for (int i = 0; i < count; i++)
            {
                Sequence charSequence = DOTween.Sequence();
                charSequence.Insert(0, tweener.DOFade(i, 0, 0.5f).SetEase(Ease.InCubic));
                charSequence.Insert(0, tweener.DOScale(i, 0, 0.5f).SetEase(Ease.InBack));
                textSequence.Insert((float)i / count * 0.5f, charSequence);
            }

            textSequence.SetTarget(text);
            return(textSequence);
        }
Exemplo n.º 16
0
        private void Error(TMP_Text text, int?charsAhead = null)
        {
            Sequence    textSequence = DOTween.Sequence();
            CharTweener tweener      = text.GetCharTweener();

            DOTween.Kill(tweener, complete: true);
            int count = charsAhead ?? tweener.CharacterCount;

            for (int i = 0; i < count; i++)
            {
                Sequence charSequence = DOTween.Sequence();
                Color    oldColor     = tweener.GetColor(i);
                tweener.SetColor(i, Color.red);
                charSequence.Insert(0, tweener.DOColor(i, oldColor, 0.5f).SetTarget(tweener));
                charSequence.Insert(0, tweener.DOShakeRotation(i, 0.5f, Vector3.forward * 25, 20).SetTarget(tweener));
                textSequence.Insert((float)i / count * 0.25f, charSequence);
            }

            textSequence.SetId(errorId);
        }
    private Sequence AnimatePerWord(StoryText text, Action <int> callback)
    {
        textMeshPro.text = text.ProcessText();
        List <Color> ColorMapping = text.MapColor(attributesLookup);
        CharTweener  _tweener     = textMeshPro.GetCharTweener();


        SoundEffectProfile textBlip = defaultTextTic;

        textMeshPro.color = Color.clear;
        var sequence = DOTween.Sequence();

        sequence.AppendInterval(text.settings.speed);

        int i = 0;

        while (i < textMeshPro.text.Length)
        {
            int j = i;
            sequence.AppendCallback(() => textBlip?.Play());
            while (j < textMeshPro.text.Length - 1 && textMeshPro.text[j] != ' ')
            {
                sequence.Join(_tweener.DOColor(j, ColorMapping[j], 0.01f))
                .Join(_tweener.DOScale(j, 0, 0.01f).From());
                j++;
            }

            sequence.AppendInterval(text.settings.speed);
            i = j;
            i++;
        }
        sequence.AppendInterval(0.1f)
        .AppendCallback(() => {
            ActivateButton(text.settings, callback);
        });
        return(sequence);
    }
Exemplo n.º 18
0
 private void Awake()
 {
     text     = GetComponent <TextMeshProUGUI>();
     _tweener = text.GetCharTweener();
 }
Exemplo n.º 19
0
 private void Awake()
 {
     text      = GetComponent <TMP_Text>();
     charTween = text.GetCharTweener();
     StartCharacterTween();
 }
Exemplo n.º 20
0
 private void Start()
 {
     _tweener = text.GetCharTweener();
     PlayString(_index, PlayNextString);
 }