// ---------[ UI FUNCTIONALITY ]--------- public static void QueueMessage(MessageDisplayData.Type messageType, string messageContent, float displayDuration = 0f) { Debug.Assert(!System.String.IsNullOrEmpty(messageContent)); // early out if (instance == null) { return; } // check for default duration if (displayDuration <= 0f) { displayDuration = (instance.defaultBaseTime + messageContent.Length * instance.defaultCharacterTime); } // queue message MessageDisplayData newMessage = new MessageDisplayData() { type = messageType, content = messageContent, displayDuration = displayDuration, }; instance.queuedMessages.Add(newMessage); if (Application.isPlaying && instance.isActiveAndEnabled && instance.m_displayRoutine == null) { instance.m_displayRoutine = instance.StartCoroutine(instance.DisplayNextMessageRoutine()); } }
private System.Collections.IEnumerator DisplayNextMessageRoutine() { MessageDisplayData message = queuedMessages[0]; MessageDisplay dialog = m_typeDialogMap[message.type]; ToastAnimationSettings anim = dialog.GetComponent <ToastAnimationSettings>(); RectTransform rectTransform = dialog.GetComponent <RectTransform>(); Vector2 origin = rectTransform.anchoredPosition; if (dialog != null) { dialog.content.text = message.content; dialog.gameObject.SetActive(true); if (anim != null) { float animTimer = 0f; while (animTimer < anim.duration) { rectTransform.anchoredPosition = Vector2.Lerp(origin + anim.offset, origin, animTimer / anim.duration); yield return(null); animTimer += Time.unscaledDeltaTime; } rectTransform.anchoredPosition = origin; } float displayTimer = 0f; m_cancelCurrentMessage = false; while (displayTimer < message.displayDuration && !m_cancelCurrentMessage) { yield return(null); displayTimer += Time.unscaledDeltaTime; } if (anim != null) { float animTimer = 0f; while (animTimer < anim.duration) { rectTransform.anchoredPosition = Vector2.Lerp(origin, origin + anim.offset, animTimer / anim.duration); yield return(null); animTimer += Time.unscaledDeltaTime; } rectTransform.anchoredPosition = origin; } dialog.gameObject.SetActive(false); } queuedMessages.Remove(message); m_displayRoutine = null; if (Application.isPlaying && this != null && this.isActiveAndEnabled && queuedMessages.Count > 0) { m_displayRoutine = StartCoroutine(DisplayNextMessageRoutine()); } }