TH1/Unity/Assets/Scripts/TH1_UI/View/Bottom/Chat/ChatMessageRowMono.cs
2026-05-27 14:19:32 +08:00

118 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using TH1_Logic.Chat;
using TH1_UI.View.Common;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace TH1_UI.View.Bottom.Chat
{
public class ChatMessageRowMono : MonoBehaviour
{
public TextMeshProUGUI SenderText;
public TextMeshProUGUI MessageText;
public TextMeshProUGUI TimeText;
public Image BackgroundImage;
// 消息容器(用于对齐控制)
public RectTransform MessageContainer;
// 颜色配置
public Color SelfMessageColor = new Color(0.8f, 0.95f, 0.8f, 0.6f);
public Color OtherMessageColor = new Color(0.95f, 0.95f, 0.95f, 0.6f);
public Color SystemMessageColor = new Color(1f, 0.9f, 0.6f, 0.6f);
// 字体颜色
public Color SelfNameColor = new Color(0.2f, 0.6f, 0.2f);
public Color OtherNameColor = new Color(0.2f, 0.4f, 0.6f);
public Color SystemNameColor = new Color(0.8f, 0.4f, 0.2f);
public void SetContent(ChatMessageData data)
{
// 设置发送者名称
if (SenderText != null)
{
if (data.IsSystem)
{
SenderText.text = "[系统]";
SenderText.color = SystemNameColor;
}
else
{
SenderText.text = BannedWordFilter.Filter(data.SenderName, BannedTextContext.Name) + ":";
SenderText.color = data.IsSelf ? SelfNameColor : OtherNameColor;
}
}
// 设置消息内容
if (MessageText != null)
{
MessageText.text = BannedWordFilter.Filter(data.Message, BannedTextContext.Chat);
}
// 设置时间
if (TimeText != null)
{
TimeText.text = data.Timestamp.ToString("HH:mm");
}
// 设置背景颜色
if (BackgroundImage != null)
{
if (data.IsSystem)
{
BackgroundImage.color = SystemMessageColor;
}
else
{
BackgroundImage.color = data.IsSelf ? SelfMessageColor : OtherMessageColor;
}
}
}
/// <summary>
/// 设置消息对齐方式
/// </summary>
public void SetAlignment(bool isRight)
{
if (MessageContainer != null)
{
MessageContainer.pivot = isRight ? new Vector2(1, 1) : new Vector2(0, 1);
MessageContainer.anchorMin = isRight ? new Vector2(1, 0) : new Vector2(0, 0);
MessageContainer.anchorMax = isRight ? new Vector2(1, 1) : new Vector2(0, 1);
}
// 调整文本对齐
if (SenderText != null)
{
SenderText.alignment = isRight ? TextAlignmentOptions.Right : TextAlignmentOptions.Left;
}
if (MessageText != null)
{
MessageText.alignment = isRight ? TextAlignmentOptions.Right : TextAlignmentOptions.Left;
}
if (TimeText != null)
{
TimeText.alignment = isRight ? TextAlignmentOptions.Right : TextAlignmentOptions.Left;
}
}
void Awake()
{
// 如果MessageContainer未设置尝试获取子物体
if (MessageContainer == null)
{
// 查找名为"MessageContainer"的子物体或使用当前transform
var container = transform.Find("MessageContainer");
if (container != null)
{
MessageContainer = container.GetComponent<RectTransform>();
}
else
{
MessageContainer = GetComponent<RectTransform>();
}
}
}
}
}