r2mods/ilspy_dump/ror2_csproj/RoR2.UI/LanguageTextMeshController.cs

117 lines
1.7 KiB
C#

using System;
using TMPro;
using UnityEngine;
namespace RoR2.UI;
public class LanguageTextMeshController : MonoBehaviour
{
[SerializeField]
private string _token;
private string previousToken;
private string resolvedString;
private TMP_Text textMeshPro;
private object[] _formatArgs = Array.Empty<object>();
public string token
{
get
{
return _token;
}
set
{
if (value != previousToken)
{
_token = value;
ResolveString();
UpdateLabel();
}
}
}
public object[] formatArgs
{
get
{
return _formatArgs;
}
set
{
_formatArgs = value;
ResolveString();
UpdateLabel();
}
}
private void OnEnable()
{
ResolveString();
UpdateLabel();
}
public void ResolveString()
{
previousToken = _token;
if (formatArgs.Length == 0)
{
resolvedString = Language.GetString(_token);
}
else
{
resolvedString = Language.GetStringFormatted(_token, formatArgs);
}
}
private void CacheComponents()
{
textMeshPro = GetComponent<TMP_Text>();
if (!textMeshPro)
{
textMeshPro = GetComponentInChildren<TMP_Text>();
}
}
private void Awake()
{
CacheComponents();
}
private void OnValidate()
{
CacheComponents();
}
private void Start()
{
}
private void UpdateLabel()
{
if ((bool)textMeshPro)
{
textMeshPro.text = resolvedString;
}
}
[RuntimeInitializeOnLoadMethod]
private static void Init()
{
Language.onCurrentLanguageChanged += OnCurrentLanguageChanged;
}
private static void OnCurrentLanguageChanged()
{
LanguageTextMeshController[] array = UnityEngine.Object.FindObjectsOfType<LanguageTextMeshController>();
foreach (LanguageTextMeshController obj in array)
{
obj.ResolveString();
obj.UpdateLabel();
}
}
}