TH1/Unity/Assets/Scripts/Logic/Multilingual/MultilingualTextMono.cs
2025-07-22 17:20:03 +08:00

112 lines
3.0 KiB
C#

/*
* @Author: 白哉
* @Description:
* @Date: 2025年05月26日 星期一 14:05:50
* @Modify:
*/
using System.Collections.Generic;
using System.Text.RegularExpressions;
using TMPro;
using UnityEngine;
namespace Logic.Multilingual
{
public class MultilingualTextMono : MonoBehaviour
{
public bool Ban;
[HideInInspector]
public uint ID = 0;
[HideInInspector]
public uint FontID = 0;
[HideInInspector]
public List<MultiTextConfig> TextCfg = new List<MultiTextConfig>();
private List<string> _paramList;
public MultilingualType PreviewType
{
get => _previewType;
set => _previewType = value;
}
private MultilingualType _previewType = MultilingualType.ZH;
public List<string> ParamList
{
get => _paramList ??= new List<string>();
set => _paramList = value;
}
private void OnEnable()
{
if (Ban) return;
OnMultilingualChanged();
}
public void OnMultilingualChanged()
{
if (Ban) return;
BindFontID();
var text = GetComponent<TextMeshProUGUI>();
if (!text) return;
if (ID != 0) text.text = MultilingualManager.Instance.GetMultilingualText(ID);
if (FontID != 0)
{
var font = MultilingualManager.Instance.GetMultilingualFont(FontID);
if (font)text.font = font;
}
if (_paramList != null && _paramList.Count != 0)
{
int index = 0;
text.text = Regex.Replace(text.text, "{param}", m =>
index < _paramList.Count ? _paramList[index++] : m.Value);
}
MatchTextCfg(text, MultilingualManager.Instance.CurrentType);
}
public void BindFontID()
{
if (Ban) return;
if (FontID != 0) return;
var text = GetComponent<TextMeshProUGUI>();
if (!text) return;
FontID = MultilingualManager.Instance.GetFontGroupID(text.font);
}
public MultiTextConfig GetMultiTextConfig(MultilingualType type)
{
foreach (var cfg in TextCfg)
{
if (cfg.Type != type) continue;
return cfg;
}
return null;
}
private void MatchTextCfg(TextMeshProUGUI text, MultilingualType type)
{
foreach (var cfg in TextCfg)
{
if (cfg.Type != type) continue;
cfg.ExcuteConfig(text);
}
}
public void SetMultilingualText(string str, MultilingualType type, TMP_FontAsset font)
{
var text = GetComponent<TextMeshProUGUI>();
if (!text) return;
text.text = str;
if (font != null) text.font = font;
MatchTextCfg(text, type);
}
}
}