using System; using System.Collections.Generic; using TMPro; using UnityEngine; /// /// Provides methods for displaying text on a text mesh pro. /// Features a queue for messages which dissapear after a set time. /// public class Announcments : MonoBehaviour { [SerializeField] TextMeshProUGUI announcementText; public Queue> announcementQueue = new Queue>(); private bool workingOnQueue = false; private float remainingTime; /// /// Update the message queue. /// void Update() { if (!workingOnQueue && announcementQueue.Count != 0) { workingOnQueue = true; Tuple announcement = announcementQueue.Dequeue(); AnnounceText(announcement.Item1, announcement.Item2); return; } if (remainingTime > 0) { remainingTime -= Time.deltaTime; } else { workingOnQueue = false; announcementText.enabled = false; remainingTime = 0; if (announcementQueue.Count == 0) { enabled = false; } } } /// /// Shows the text without time limit. /// /// Text to be shown. public void AnnounceText(string text) { announcementText.text = text; announcementText.enabled = true; announcementQueue.Clear(); enabled = false; } /// /// Set the announcement text for a certain time. /// /// /// Time in seconds private void AnnounceText(string text, float time) { announcementText.text = text; announcementText.enabled = true; remainingTime = time; enabled = true; } /// /// Add an announcement to the queue. /// /// Text to be shown. /// Time of the announcement in seconds. public void QueueAnnounceText(string text, float time) { announcementQueue.Enqueue(new Tuple(text, time)); enabled = true; } /// /// Stop the announcement and clear the queue. /// public void StopAnnouncement() { announcementQueue.Clear(); announcementText.text = String.Empty; remainingTime = 0; announcementText.enabled = false; enabled = false; } }