80 lines
1.9 KiB
C#

using System;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo
{
/// <summary>
/// MVP 操作日志窗口。
/// </summary>
public sealed class FaceDetectionDemoLogger : MonoBehaviour
{
[SerializeField] private Text m_logText; // 日志文本。
[SerializeField] private ScrollRect m_scrollRect; // 日志滚动视图。
private readonly StringBuilder m_buffer = new StringBuilder(8192); // 日志缓存。
/// <summary>
/// 绑定 UI。
/// </summary>
public void Bind(Text logText, ScrollRect scrollRect)
{
m_logText = logText;
m_scrollRect = scrollRect;
}
/// <summary>
/// 写入普通日志。
/// </summary>
public void Info(string message)
{
Append("INFO", message);
}
/// <summary>
/// 写入错误日志。
/// </summary>
public void Error(string message)
{
Append("ERROR", message);
}
/// <summary>
/// 清空日志。
/// </summary>
public void Clear()
{
m_buffer.Length = 0;
Refresh();
}
private void Append(string level, string message)
{
m_buffer.Append('[')
.Append(DateTime.Now.ToString("HH:mm:ss"))
.Append("] ")
.Append(level)
.Append(" ")
.AppendLine(message ?? string.Empty);
Refresh();
}
private void Refresh()
{
if (m_logText != null)
{
m_logText.text = m_buffer.ToString();
}
if (m_scrollRect != null)
{
Canvas.ForceUpdateCanvases();
m_scrollRect.verticalNormalizedPosition = 0f;
}
}
}
}