TH1/My project/Assets/Scripts/Logic/Multilingual/MultilingualManager.cs
2025-05-28 21:29:27 +08:00

85 lines
2.5 KiB
C#

/*
* @Author: 白哉
* @Description:
* @Date: 2025年05月26日 星期一 14:05:31
* @Modify:
*/
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
namespace Logic.Multilingual
{
public class MultilingualManager
{
public static MultilingualManager Instance = new MultilingualManager();
private MultilingualData _multilingualData;
private MultilingualType _currentType;
private List<MultilingualTextMono> _textComs;
public void Init()
{
RefreshMultilingualData();
_currentType = (MultilingualType)PlayerPrefs.GetInt("Multilingual", 0);
ChangedMultilingual(_currentType);
}
public string GetMultilingualText(uint id)
{
RefreshMultilingualData();
return _multilingualData.GetMultilingualStr(id, _currentType);
}
public TMP_FontAsset GetMultilingualFont(uint fontId)
{
RefreshMultilingualData();
return _multilingualData.GetMultilingualFont(fontId, _currentType);
}
public void ChangedMultilingual(MultilingualType type)
{
RefreshMultilingualData();
RefreshTextComs();
_currentType = type;
foreach (var textCom in _textComs) textCom.OnMultilingualChanged();
}
public uint GetFontGroupID(TMP_FontAsset font)
{
RefreshMultilingualData();
return _multilingualData.GetFontGroupID(font);
}
public void SetUIText(TextMeshPro textCom, string id)
{
if (!textCom) return;
var multilingual = textCom.gameObject.GetComponent<MultilingualTextMono>();
if (!multilingual) multilingual = textCom.gameObject.AddComponent<MultilingualTextMono>();
multilingual.ID = uint.Parse(id);
multilingual.OnMultilingualChanged();
}
private void RefreshMultilingualData()
{
if (!_multilingualData) _multilingualData = Resources.Load<MultilingualData>("Export/Multilingual");
}
private void RefreshTextComs()
{
var uiObj = GameObject.Find("UICanvas");
if (!uiObj)
{
Debug.LogError($"找不到UI根节点");
return;
}
_textComs = uiObj.GetComponentsInChildren<MultilingualTextMono>(true).ToList();
}
}
}