SHA256
39 lines
1.6 KiB
C#
39 lines
1.6 KiB
C#
using ADOFAIRenderer.Localization;
|
|
using HarmonyLib;
|
|
using UnityEngine;
|
|
|
|
namespace ADOFAIRenderer.Patch.Game;
|
|
|
|
/// <summary>
|
|
/// Keeps the mod UI language (<see cref="LocalizationManager"/>) equal to the game language.
|
|
/// <para>
|
|
/// Patched members: <c>RDString.Setup()</c>, which initializes the game's string table and sets <c>RDString.language</c> from
|
|
/// <c>Persistence.language</c> (it returns immediately when already initialized); and <c>RDString.ChangeLanguage(SystemLanguage)</c>,
|
|
/// which stores the language in <c>Persistence.language</c>, clears the initialized flag and calls Setup again.
|
|
/// </para>
|
|
/// <para>Always active (independent of the render stage). Runs on the main Unity thread.</para>
|
|
/// </summary>
|
|
[HarmonyPatch(typeof(RDString))]
|
|
internal static class LanguageSyncPatch
|
|
{
|
|
/// <summary>Postfix of <c>RDString.ChangeLanguage</c>: applies the selected language to the mod UI.</summary>
|
|
/// <param name="language">Language passed to ChangeLanguage.</param>
|
|
[HarmonyPatch(nameof(RDString.ChangeLanguage))]
|
|
[HarmonyPostfix]
|
|
public static void OnChangeLanguage(SystemLanguage language)
|
|
{
|
|
LocalizationManager.SetLanguage(language);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Postfix of <c>RDString.Setup</c>: applies <c>RDString.language</c> (the language resolved by the game) to the mod UI.
|
|
/// Runs on every Setup call, including the early-return calls made when the string table is already initialized.
|
|
/// </summary>
|
|
[HarmonyPatch(nameof(RDString.Setup))]
|
|
[HarmonyPostfix]
|
|
public static void OnSetup()
|
|
{
|
|
LocalizationManager.SetLanguage(RDString.language);
|
|
}
|
|
}
|