diff --git a/MelonLoader/Patches/BaseTextObjects/TextMeshProUGUI_Patch.cs b/MelonLoader/Patches/BaseTextObjects/TextMeshProUGUI_Patch.cs index fc3d48d..d9e6730 100644 --- a/MelonLoader/Patches/BaseTextObjects/TextMeshProUGUI_Patch.cs +++ b/MelonLoader/Patches/BaseTextObjects/TextMeshProUGUI_Patch.cs @@ -31,7 +31,7 @@ namespace PvZ_Fusion_Translator.Patches.BaseTextObjects if (__instance.name.StartsWith("LevelName")) { __instance.text = __instance.text.Replace("\n", " "); - + if (__instance.name == "LevelName2" || __instance.name == "LevelName3") { TowerManager_Patch.updatedText.Add(__instance.transform); diff --git a/MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs index c460d9d..694ddb6 100644 --- a/MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs @@ -64,27 +64,17 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects if (abyssBuffData.ContainsKey(text.text)) { text.text = abyssBuffData[text.text]; - text.font = fontAsset; } else { - foreach (var x in abyssBuffData) + string translatedRegex = TranslateAbyssBuffRegex(text.text); + if (translatedRegex != null) { - if (x.Key.Contains("{value}")) - { - string pattern = Regex.Escape(x.Key).Replace("\\{value}", "(\\d+)"); - if (Regex.IsMatch(text.text, pattern)) - { - var regex = new Regex(pattern); - var match = regex.Match(text.text); - - text.text = String.Format(x.Value.Replace("value", "0"), match.Groups[1].Value); - text.font = fontAsset; - break; - } - } + text.text = translatedRegex; } } + + text.font = fontAsset; } foreach(AbyssBuffWindow window in __instance.GetComponentsInChildren()) @@ -100,5 +90,25 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects string abyssBuffText = File.ReadAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language), "abyss_buffs.json")); abyssBuffData = JsonSerializer.Deserialize>(abyssBuffText); } + + public static string TranslateAbyssBuffRegex(string originalText) + { + foreach (var x in abyssBuffData) + { + if (x.Key.Contains("{value}")) + { + string pattern = Regex.Escape(x.Key).Replace("\\{value}", "(\\d+)"); + if (Regex.IsMatch(originalText, pattern)) + { + var regex = new Regex(pattern); + var match = regex.Match(originalText); + + return String.Format(x.Value.Replace("value", "0"), match.Groups[1].Value); + } + } + } + + return null; + } } } diff --git a/MelonLoader/Patches/GameObjects/AbyssSelectBuffWindow_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssSelectBuffWindow_Patch.cs new file mode 100644 index 0000000..d369247 --- /dev/null +++ b/MelonLoader/Patches/GameObjects/AbyssSelectBuffWindow_Patch.cs @@ -0,0 +1,50 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using UnityEngine; +using System.Text.RegularExpressions; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(AbyssSelectBuffWindow))] + public static class AbyssSelectBuffWindow_Patch + { + [HarmonyPatch(nameof(AbyssSelectBuffWindow.OnAnimOver))] + [HarmonyPostfix] + private static void OnAnimOver(AbyssSelectBuffWindow __instance) + { + TranslateBuffWindow(__instance); + } + + [HarmonyPatch(nameof(AbyssSelectBuffWindow.SetBuff))] + [HarmonyPostfix] + private static void SetBuff(AbyssSelectBuffWindow __instance) + { + TranslateBuffWindow(__instance); + } + + public static void TranslateBuffWindow(AbyssSelectBuffWindow __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + AbyssBuffMenu_Patch.LoadAbyssBuffData(); + + foreach (TextMeshProUGUI titleText in __instance.titleText) + { + if (AbyssBuffMenu_Patch.abyssBuffData.ContainsKey(titleText.text)) + { + titleText.text = AbyssBuffMenu_Patch.abyssBuffData[titleText.text]; + } + titleText.font = fontAsset; + } + + string translatedIntroduceText = (AbyssBuffMenu_Patch.abyssBuffData.ContainsKey(__instance.introduce.text)) ? AbyssBuffMenu_Patch.abyssBuffData[__instance.introduce.text] : AbyssBuffMenu_Patch.TranslateAbyssBuffRegex(__instance.introduce.text); + + if (translatedIntroduceText != null) + { + __instance.introduce.text = translatedIntroduceText; + __instance.introduce.font = fontAsset; + } + } + } +} diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/Advanture_Btn_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/Advanture_Btn_Patch.cs index 08e6209..1238676 100644 --- a/MelonLoader/Patches/GameObjects/ButtonObjects/Advanture_Btn_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/Advanture_Btn_Patch.cs @@ -13,102 +13,14 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects [HarmonyPostfix] private static void Start(Advanture_Btn __instance) { - StringStore.TranslateTextTransform(__instance.transform, true); - Transform parentTransform = __instance.transform.parent.transform; - if (__instance.name == "Goback") - { - Transform backgroundTransform = parentTransform.Find("Background"); - if(backgroundTransform != null) - { - backgroundTransform.Find("Name").GetComponent().autoSizeTextContainer = true; - backgroundTransform.Find("Shadow").GetComponent().autoSizeTextContainer = true; - } - } + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - Transform levelTransform = parentTransform.Find("Levels"); - if (levelTransform != null) - { - - StringStore.TranslateTextTransform(levelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(levelTransform.Find("LastPage")); - - Transform pageMiniGamesTransform = levelTransform.transform.Find("PageMiniGames"); - if (pageMiniGamesTransform != null) - { - StringStore.TranslateTextTransform(pageMiniGamesTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageMiniGamesTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageMiniGamesTransform.Find("LastPage")); - } - - Transform pageUnlockChallengeTransform = levelTransform.transform.Find("PageUnlockChallenge"); - if (pageUnlockChallengeTransform != null) - { - StringStore.TranslateTextTransform(pageUnlockChallengeTransform.Find("BackToIndex")); - } - - Transform pageFlagChallengeTransform = levelTransform.transform.Find("PageFlagChallenge"); - if (pageFlagChallengeTransform != null) - { - StringStore.TranslateTextTransform(pageFlagChallengeTransform.Find("BackToIndex")); - } - - Transform pageTravelExperienceTransform = levelTransform.transform.Find("PageTravelExperience"); - if (pageTravelExperienceTransform != null) - { - StringStore.TranslateTextTransform(pageTravelExperienceTransform.Find("BackToIndex")); - } - - Transform pageGardenProtectionTransform = levelTransform.transform.Find("PageGardenProtection"); - if (pageGardenProtectionTransform != null) - { - StringStore.TranslateTextTransform(pageGardenProtectionTransform.Find("BackToIndex")); - } - - Transform pageNormalTravelTransform = levelTransform.transform.Find("PageNormalTravel"); - if (pageNormalTravelTransform != null) - { - StringStore.TranslateTextTransform(pageNormalTravelTransform.Find("BackToIndex")); - } - - Transform pageRandomLevelTransform = levelTransform.transform.Find("PageRandomLevel"); - if (pageRandomLevelTransform != null) - { - StringStore.TranslateTextTransform(pageRandomLevelTransform.Find("BackToIndex")); - } - - Transform pageUltimateExperienceTransform = levelTransform.transform.Find("PageUltimateExprience"); - if (pageUltimateExperienceTransform != null) - { - StringStore.TranslateTextTransform(pageUltimateExperienceTransform.Find("BackToIndex")); - } - - Transform pageAdvantureLevelTransform = levelTransform.transform.Find("PageAdvantureLevel"); - if (pageAdvantureLevelTransform != null) - { - StringStore.TranslateTextTransform(pageAdvantureLevelTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageAdvantureLevelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageAdvantureLevelTransform.Find("LastPage")); - } - - Transform pageScaryPotTransform = levelTransform.transform.Find("PageScaryPot"); - if (pageScaryPotTransform != null) - { - StringStore.TranslateTextTransform(pageScaryPotTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageScaryPotTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageScaryPotTransform.Find("LastPage")); - } - - Transform pageNewAdvantureLevelTransform = levelTransform.transform.Find("PageNewAdvantureLevel"); - if (pageNewAdvantureLevelTransform != null) - { - StringStore.TranslateTextTransform(pageNewAdvantureLevelTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageNewAdvantureLevelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageNewAdvantureLevelTransform.Find("LastPage")); - } - } - - StringStore.TranslateTextTransform(parentTransform.Find("CameraSize")); - StringStore.TranslateTextTransform(parentTransform.Find("CanvasSize")); - } + foreach (TextMeshProUGUI txt in __instance.GetComponentsInChildren()) + { + string originalKey = StringStore.translationString.FirstOrDefault(x => x.Value == txt.text).Key; + txt.text = (StringStore.translationString.ContainsKey(originalKey + "_MG")) ? StringStore.TranslateText(originalKey + "_MG") : StringStore.TranslateText(txt.text); + txt.font = fontAsset; + } + } } } diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/CustomLevelEnter_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/CustomLevelEnter_Patch.cs index aa250d3..ed70973 100644 --- a/MelonLoader/Patches/GameObjects/ButtonObjects/CustomLevelEnter_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/CustomLevelEnter_Patch.cs @@ -12,26 +12,14 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects { [HarmonyPatch(nameof(CustomLevelEnter.Start))] [HarmonyPostfix] - private static void Show(CustomLevelEnter __instance) + private static void Start(CustomLevelEnter __instance) { TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - foreach(TextMeshProUGUI txt in __instance.GetComponentsInChildren()) + foreach(TextMeshProUGUI txt in __instance.GetComponentsInChildren()) { - string text = txt.text; - Transform menuTransform = __instance.transform.parent.parent.parent.parent.parent.parent; // guys i'm really sorry please forgive me - string customIZStringKey = StringStore.translationString.FirstOrDefault(x => x.Value == text).Key + "_IZ"; // dawg what the fuck - bool hasCustomIZString = StringStore.translationString.ContainsKey(customIZStringKey); - - if (hasCustomIZString && menuTransform.name.Contains("IZMenu")) - { - txt.text = StringStore.TranslateText(customIZStringKey); - } - else - { - txt.text = StringStore.TranslateText(text); - } - + string originalKey = StringStore.translationString.FirstOrDefault(x => x.Value == txt.text).Key; + txt.text = (StringStore.translationString.ContainsKey(originalKey + "_IZ")) ? StringStore.TranslateText(originalKey + "_IZ") : StringStore.TranslateText(txt.text); txt.font = fontAsset; } } diff --git a/MelonLoader/Patches/Managers/CanvasUpUI_Patch.cs b/MelonLoader/Patches/Managers/CanvasUpUI_Patch.cs new file mode 100644 index 0000000..b01b888 --- /dev/null +++ b/MelonLoader/Patches/Managers/CanvasUpUI_Patch.cs @@ -0,0 +1,28 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace PvZ_Fusion_Translator.Patches.Managers +{ + [HarmonyPatch(typeof(CanvasUpUI))] + public static class CanvasUpUI_Patch + { + [HarmonyPatch(nameof(CanvasUpUI.Start))] + [HarmonyPostfix] + public static void Start(IZBottomMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + foreach(TextMeshProUGUI text in __instance.GetComponentsInChildren()) + { + string originalKey = StringStore.translationString.FirstOrDefault(x => x.Value.Replace("\n", " ") == text.text).Key; + text.text = (StringStore.translationString.ContainsKey(originalKey + "_MG")) ? StringStore.TranslateText(originalKey + "_MG") : StringStore.TranslateText(text.text); + text.text = text.text.Replace("\n", " "); + text.font = fontAsset; + } + } + } +} \ No newline at end of file diff --git a/MelonLoader/Patches/Managers/InGameUI_Patch.cs b/MelonLoader/Patches/Managers/InGameUI_Patch.cs index 20971ec..c5fd833 100644 --- a/MelonLoader/Patches/Managers/InGameUI_Patch.cs +++ b/MelonLoader/Patches/Managers/InGameUI_Patch.cs @@ -26,6 +26,7 @@ namespace PvZ_Fusion_Translator.Patches.Managers TextMeshProUGUI[] array2 = array; for (int i = 0; i < array2.Length; i++) { + string originalText = array2[i].text; array2[i].text = array2[i].text.Replace("\n", " "); Regex checkFusionChallenge = new Regex("^超级([^\\s:]+)(:?挑战1?)"); @@ -43,7 +44,7 @@ namespace PvZ_Fusion_Translator.Patches.Managers } else { - array2[i] = StringStore.TranslateText(array2[i]); + array2[i].text = (StringStore.translationString.ContainsKey(array2[i].text + "_MG")) ? StringStore.TranslateText(array2[i].text + "_MG") : StringStore.TranslateText(array2[i].text); array2[i].text = array2[i].text.Replace("\n", " "); } } diff --git a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj index af34d21..c9a13a6 100644 --- a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj +++ b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj @@ -404,6 +404,7 @@ + @@ -467,6 +468,7 @@ +