59 lines
2.0 KiB
C#
59 lines
2.0 KiB
C#
|
|
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>
|
|||
|
|
public void Clear()
|
|||
|
|
{
|
|||
|
|
if (descriptionText != null)
|
|||
|
|
{
|
|||
|
|
descriptionText.text = string.Empty;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|