using AppUI.Config;
using AppUI.Localization;
using TMPro;
using UnityEngine;
namespace AppUI.Component.DeviceInfo
{
///
/// 版本行等需要运行时参数(平台、版本号)的文案。
/// 与同一 TMP 上的 配合:Prefab 配 textKey,本脚本只填 。
///
[ExecuteAlways]
public class DeviceInfo : MonoBehaviour
{
const string VersionTextKey = "appui-login-version";
[SerializeField]
TMP_Text deviceInfo;
AppUITextAutoLanguage _versionLocalized;
void Awake()
{
ResolveReferences();
}
void OnEnable()
{
AppUILocalization.OnLanguageChanged += RefreshVersionText;
RefreshVersionText(AppUILocalization.GetLanguage());
}
void Start()
{
RefreshVersionText(AppUILocalization.GetLanguage());
}
void OnDisable()
{
AppUILocalization.OnLanguageChanged -= RefreshVersionText;
}
#if UNITY_EDITOR
void OnValidate()
{
ResolveReferences();
if (!Application.isPlaying)
RefreshVersionText(AppUILocalization.GetLanguage());
}
#endif
void ResolveReferences()
{
if (deviceInfo == null)
deviceInfo = GetComponentInChildren(true);
if (deviceInfo != null)
_versionLocalized = deviceInfo.GetComponent();
}
void RefreshVersionText(LanguageEnum _)
{
string platform = GlobalConfig.GetPlatformDisplayName();
string version = Application.version;
#if UNITY_EDITOR
if (!Application.isPlaying && string.IsNullOrEmpty(version))
version = "1.0.0";
#endif
if (_versionLocalized != null)
{
_versionLocalized.textFormatArgs = new object[] { platform, version };
if (string.IsNullOrEmpty(_versionLocalized.GetTextKey()))
_versionLocalized.SetTextKey(VersionTextKey);
else
_versionLocalized.ApplyToText();
return;
}
if (deviceInfo == null)
return;
deviceInfo.text = string.Format(
AppUILocalization.GetTextByKey(VersionTextKey),
platform,
version);
}
}
}