Space-Smash-Out/Assets/Scripts/UI/Announcments.cs
2024-04-03 16:48:59 +02:00

94 lines
2.2 KiB
C#

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