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;
}
}