94 lines
2.2 KiB
C#
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;
|
|
}
|
|
}
|