Beispiel #1
0
    private void CheckShowTime(BubbleMsg msg)
    {
        var timeLeft       = msg.maxTime - (msg.msg.Length * msg.characterPopInSpeed);
        var additionalTime = PlayerPrefs.GetFloat(PlayerPrefKeys.ChatBubbleAdditionalTime);

        if (timeLeft >= additionalTime)
        {
            return;
        }

        //Set max time to the needed amount
        msg.maxTime = additionalTime - timeLeft;
    }
Beispiel #2
0
    /// <summary>
    /// Pops in characters from the message over time
    /// </summary>
    private void ShowCharacter(BubbleMsg msg)
    {
        while (msg.elapsedTime > 0f)
        {
            if (msg.characterIndex > msg.msg.Length - 1)
            {
                break;
            }

            msg.elapsedTime -= msg.characterPopInSpeed;
            var currentCharacter = msg.msg[msg.characterIndex];

            if (char.IsWhiteSpace(currentCharacter))
            {
                msg.elapsedTime -= msg.characterPopInSpeed * 2f;
            }
            else if (char.IsPunctuation(currentCharacter))
            {
                msg.elapsedTime -= msg.characterPopInSpeed * 3f;
            }

            var text    = msg.msg.Substring(0, msg.characterIndex + 1);
            var newText = new StringBuilder();

            //God Save Our Eyes
            if ((msg.modifier & ChatModifier.Clown) == ChatModifier.Clown &&
                PlayerPrefs.GetInt(PlayerPrefKeys.ChatBubbleClownColour) == 1)
            {
                for (int i = 0; i < text.Length; i++)
                {
                    newText.Append($"<color=#{RandomUtils.CreateRandomBrightColorString()}>{text[i]}</color>");
                }
            }
            else
            {
                newText.Append(text);
            }

            if (msg.buffered && msg.characterIndex < msg.msg.Length - 1)
            {
                //Add the rest of the character but invisible to make bubble correct size
                //and keep the characters in the same place (helps reading)
                newText.Append($"<color=#00000000>{msg.msg.Substring(msg.characterIndex + 1)}</color>");
            }

            SetBubbleParameters(newText.ToString(), msg.modifier);

            msg.characterIndex++;
        }
    }
Beispiel #3
0
    IEnumerator ShowDialogue(CancellationToken cancelToken)
    {
        showingDialogue = true;
        if (msgQueue.Count == 0)
        {
            yield return(WaitFor.EndOfFrame);

            yield break;
        }
        BubbleMsg msg = msgQueue.Dequeue();

        SetBubbleParameters(msg.msg, msg.modifier);

        while (showingDialogue)
        {
            if (cancelToken.IsCancellationRequested)
            {
                yield break;
            }

            yield return(WaitFor.EndOfFrame);

            msg.elapsedTime += Time.deltaTime;
            if (msg.elapsedTime * displayTimeMultiplier >= msg.maxTime && msg.elapsedTime >= displayTimeMin)
            {
                if (msgQueue.Count == 0)
                {
                    ReturnToPool();
                }
                else
                {
                    msg = msgQueue.Dequeue();
                    SetBubbleParameters(msg.msg, msg.modifier);
                }
            }
        }

        yield return(WaitFor.EndOfFrame);
    }
Beispiel #4
0
    IEnumerator ShowDialogue()
    {
        showingDialogue = true;
        if (msgQueue.Count == 0)
        {
            yield return(WaitFor.EndOfFrame);

            yield break;
        }
        BubbleMsg msg = msgQueue.Dequeue();

        SetBubbleParameters(msg.msg, msg.modifier);

        while (showingDialogue)
        {
            yield return(WaitFor.EndOfFrame);

            msg.elapsedTime += Time.deltaTime;
            if (msg.elapsedTime * displayTimeMultiplier >= msg.maxTime && msg.elapsedTime >= displayTimeMin)
            {
                if (msgQueue.Count == 0)
                {
                    bubbleText.text = "";
                    chatBubble.SetActive(false);
                    showingDialogue = false;
                }
                else
                {
                    msg = msgQueue.Dequeue();
                    SetBubbleParameters(msg.msg, msg.modifier);
                }
            }
        }

        yield return(WaitFor.EndOfFrame);
    }
Beispiel #5
0
    IEnumerator ShowDialogue(CancellationToken cancelToken)
    {
        showingDialogue = true;
        if (msgQueue.Count == 0)
        {
            yield return(WaitFor.EndOfFrame);

            yield break;
        }

DoBubble:

        BubbleMsg msg = msgQueue.Dequeue();

        //Sets the chat text to instant from player prefs, 1 == true
        msg.instantText = PlayerPrefs.GetInt(PlayerPrefKeys.ChatBubbleInstant) == 1;

        bubbleSize = PlayerPrefs.GetFloat(PlayerPrefKeys.ChatBubbleSize);

        if (msg.instantText)
        {
            SetBubbleParameters(msg.msg, msg.modifier);
        }
        else
        {
            //Sets the chat character pop in speed from player prefs
            msg.characterPopInSpeed = PlayerPrefs.GetFloat(PlayerPrefKeys.ChatBubblePopInSpeed);

            //See if the show time needs updating for speed
            CheckShowTime(msg);
        }

        while (showingDialogue)
        {
            if (cancelToken.IsCancellationRequested)
            {
                yield break;
            }

            yield return(WaitFor.EndOfFrame);

            msg.elapsedTime += Time.deltaTime;

            if (msg.instantText == false)
            {
                ShowCharacter(msg);
            }

            if (msg.elapsedTime * displayTimeMultiplier >= msg.maxTime && msg.elapsedTime >= displayTimeMin)
            {
                if (msgQueue.Count == 0)
                {
                    ReturnToPool();
                }
                else
                {
                    goto DoBubble;
                }
            }
        }

        yield return(WaitFor.EndOfFrame);
    }