Files
Cielonos/Assets/Scripts/MainGame/UI/PlayerUI/MainGamePages/Common/Item/ItemDescriptionEntry.cs
SoulliesOfficial 9a9e48f8a5
2026-06-27 12:52:03 -04:00

71 lines
2.4 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 System.Collections.Generic;
using Cielonos.MainGame.Inventory;
using SLSUtilities.General;
using SLSUtilities.UI;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Cielonos.MainGame.UI
{
/// <summary>
/// 单条物品描述条目 UI 组件。
/// 渲染管线Localize → DisplayTextResolver.Resolve → InputGlyphParser.Parse → TMP_Text。
/// </summary>
public class ItemDescriptionEntry : MonoBehaviour
{
private const string LocalizationTable = "Items";
[Tooltip("描述文本,显示 descriptionKey 的本地化内容(含动态数值替换和按键图标解析)。")]
public TMP_Text descriptionText;
/// <summary>
/// 使用 <see cref="ItemDescription"/> 的数据填充描述条目。
/// 完整渲染管线:本地化 → {key} 占位符替换 → [Token] 按键图标解析。
/// </summary>
/// <param name="description">描述数据。</param>
/// <param name="descriptionArgs">可选的动态值字典,用于替换本地化文本中的 {key} 占位符。</param>
public void SetDescription(ItemDescription description, Dictionary<string, string> descriptionArgs = null)
{
if (description == null)
{
Clear();
return;
}
if (descriptionText == null) return;
if (string.IsNullOrEmpty(description.descriptionKey))
{
descriptionText.text = string.Empty;
return;
}
string localizedText = description.descriptionKey.Localize(LocalizationTable);
localizedText = DisplayTextResolver.Resolve(localizedText, descriptionArgs);
descriptionText.text = InputGlyphParser.Parse(localizedText);
}
/// <summary>
/// 直接使用原始文本填充条目(支持解析按键图标)。
/// </summary>
/// <param name="rawText">原始文本(如动态生成的升级信息)。</param>
public void SetRawText(string rawText)
{
if (descriptionText != null)
{
descriptionText.text = InputGlyphParser.Parse(rawText);
}
}
/// <summary>清空条目内容。</summary>
public void Clear()
{
if (descriptionText != null)
{
descriptionText.text = string.Empty;
}
}
}
}