83 lines
2.5 KiB
C#
83 lines
2.5 KiB
C#
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class MessageBoxController : MonoBehaviour
|
|
{
|
|
public int maxMessageNum = 50;
|
|
public string defaultColor = "white";
|
|
public string warningColor = "#ffa500ff";
|
|
public string errorColor = "#800000ff";
|
|
public GameObject messagePanelObj;
|
|
public GameObject messageTextPrefab;
|
|
|
|
[SerializeField]
|
|
private List<Message> messages = new List<Message>();
|
|
|
|
|
|
public void PushMessage(string text)
|
|
{
|
|
// push simple message to message list
|
|
MessageOverflowHandler();
|
|
Message newMessage = new Message();
|
|
newMessage.text = text;
|
|
|
|
GameObject newText = Instantiate(messageTextPrefab, messagePanelObj.transform);
|
|
newMessage.textObject = newText.GetComponent<TextMeshProUGUI>();
|
|
newMessage.textObject.text = newMessage.text;
|
|
|
|
messages.Add(newMessage);
|
|
}
|
|
|
|
// push multi color message to message list
|
|
public void PushMessage(List<string> messageList,List<string> colorList)
|
|
{
|
|
// check messages and colors list length match
|
|
if (messageList.Count != colorList.Count)
|
|
{
|
|
// delete extra colors or add white color to extra messages
|
|
if (messageList.Count > colorList.Count)
|
|
{
|
|
while(messageList.Count > colorList.Count)
|
|
{
|
|
colorList.Add(defaultColor);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
colorList.RemoveRange(messageList.Count, colorList.Count - messageList.Count);
|
|
}
|
|
|
|
}
|
|
MessageOverflowHandler();
|
|
Message newMessage = new Message();
|
|
newMessage.text = "";
|
|
// assemble message text with color
|
|
for (int i = 0; i < messageList.Count; i++)
|
|
{
|
|
newMessage.text += "<color=" + colorList[i] + ">" + messageList[i] + "</color>";
|
|
}
|
|
GameObject newText = Instantiate(messageTextPrefab, messagePanelObj.transform);
|
|
newMessage.textObject = newText.GetComponent<TextMeshProUGUI>();
|
|
newMessage.textObject.text = newMessage.text;
|
|
|
|
messages.Add(newMessage);
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class Message
|
|
{
|
|
public string text;
|
|
public TMPro.TextMeshProUGUI textObject;
|
|
}
|
|
|
|
private void MessageOverflowHandler()
|
|
{
|
|
// destroy the oldest message if message list is full
|
|
if (messages.Count >= maxMessageNum)
|
|
{
|
|
Destroy(messages[0].textObject.gameObject);
|
|
messages.RemoveAt(0);
|
|
}
|
|
}
|
|
} |