107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.Localization.Components;
|
|
using UnityEngine.Localization;
|
|
using UnityEngine.Localization.Settings;
|
|
using TMPro;
|
|
using AibisDream.Framework;
|
|
|
|
/// <summary>
|
|
/// 收藏夹 / 生成窗口中的打孔带 UI 项。
|
|
/// </summary>
|
|
namespace AibisDream.FixSystem
|
|
{
|
|
public class PunchTapeItem : MonoBehaviour
|
|
{
|
|
public Image clueImageUI;
|
|
public LocalizeStringEvent nameText;
|
|
public LocalizeStringEvent memoryIndexLabelText;
|
|
public TMP_Text visibilityText;
|
|
public TMP_Text contentIdText;
|
|
public TMP_Text timecodeText;
|
|
|
|
[HideInInspector]
|
|
public bool used = false;
|
|
|
|
private PunchTape punchTapeData;
|
|
private PunchTapeDefinition punchTapeDefinition;
|
|
private int localizationRefreshVersion;
|
|
|
|
private void OnEnable()
|
|
{
|
|
LocalizationSettings.SelectedLocaleChanged += HandleSelectedLocaleChanged;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
LocalizationSettings.SelectedLocaleChanged -= HandleSelectedLocaleChanged;
|
|
localizationRefreshVersion++;
|
|
}
|
|
|
|
public void Setup(PunchTape punchTape, PunchTapeDefinition definition)
|
|
{
|
|
punchTapeData = punchTape;
|
|
punchTapeDefinition = definition;
|
|
used = punchTape != null && punchTape.used;
|
|
ApplyDisplay(punchTapeData, definition);
|
|
}
|
|
|
|
private void ApplyDisplay(PunchTape pt, PunchTapeDefinition definition)
|
|
{
|
|
if (pt == null || definition == null)
|
|
{
|
|
Debug.LogWarning("PunchTape 或其定义为空,显示已中止。", this);
|
|
return;
|
|
}
|
|
|
|
if (clueImageUI != null)
|
|
clueImageUI.color = pt.used ? Color.grey : Color.white;
|
|
|
|
if (nameText != null)
|
|
{
|
|
RefreshLocalizedName(LocalizationSettings.SelectedLocale);
|
|
}
|
|
|
|
memoryIndexLabelText?.RefreshString();
|
|
|
|
if (visibilityText != null)
|
|
visibilityText.text = $"@{definition.VisibilityCode}";
|
|
if (contentIdText != null)
|
|
contentIdText.text = $"CID: {definition.ContentId}";
|
|
if (timecodeText != null)
|
|
timecodeText.text = $"T+: {definition.Timecode}";
|
|
}
|
|
|
|
private void HandleSelectedLocaleChanged(Locale locale)
|
|
{
|
|
RefreshLocalizedName(locale);
|
|
}
|
|
|
|
private async void RefreshLocalizedName(Locale locale)
|
|
{
|
|
if (nameText == null || punchTapeDefinition == null)
|
|
return;
|
|
|
|
int version = ++localizationRefreshVersion;
|
|
string localizedName = await LocalizationKit.LocalizeParamAsync(
|
|
punchTapeDefinition.DisplayNameParam,
|
|
locale);
|
|
if (version != localizationRefreshVersion ||
|
|
nameText == null ||
|
|
punchTapeDefinition == null)
|
|
return;
|
|
|
|
nameText.StringReference.Arguments = new object[]
|
|
{
|
|
localizedName
|
|
};
|
|
nameText.RefreshString();
|
|
}
|
|
|
|
public PunchTape GetPunchTapeData()
|
|
{
|
|
return punchTapeData;
|
|
}
|
|
}
|
|
}
|