translation bug fixes with abyss and ui button

This commit is contained in:
SillyStar-Github 2025-04-27 06:00:38 -04:00
parent a4d3ed0e90
commit bedcddb72f
4 changed files with 120 additions and 0 deletions

View file

@ -53,6 +53,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects
}
txt.text = string.Format(StringStore.translationStringRegex[regexStr], [.. dynamicParts]);
MelonLogger.Msg(txt.text);
txt.font = fontAsset;
}
}

View file

@ -0,0 +1,64 @@
using HarmonyLib;
using Il2Cpp;
using Il2CppTMPro;
using MelonLoader;
using PvZ_Fusion_Translator.AssetStore;
using Unity.VisualScripting;
using UnityEngine;
using System.Text.RegularExpressions;
namespace PvZ_Fusion_Translator.Patches.GameObjects
{
[HarmonyPatch(typeof(AbyssSettlementMenu))]
public static class AbyssSettlementMenu_Patch
{
[HarmonyPatch(nameof(AbyssSettlementMenu.InitSettle))]
[HarmonyPostfix]
private static void InitSettle(AbyssSettlementMenu __instance)
{
TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString());
string regexStr1 = "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n极限模式产出:(\\d+)\n非首胜无额外产出\n产出叶绿素总计:(\\d+)\n";
string regexStr2 = "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n极限模式产出:(\\d+)\n首胜产出:(\\d+)\n剩余小推车数量:(\\d+),获得叶绿素:(\\d+)\n产出叶绿素总计:(\\d+)";
Regex regex1 = new Regex(regexStr1);
Regex regex2 = new Regex(regexStr2);
if (regex1.IsMatch(__instance.settleInfo.text))
{
Match match = regex1.Match(__instance.settleInfo.text);
int groupCount = match.Groups.Count;
List<string> dynamicParts = [];
for (int i = 1; i < groupCount; i++)
{
string groupValue = match.Groups[i].Value;
string translatedValue = StringStore.translationString.ContainsKey(groupValue) ? StringStore.translationString[groupValue] : groupValue;
dynamicParts.Add(translatedValue);
}
__instance.settleInfo.text = string.Format(StringStore.translationStringRegex[regexStr1], [.. dynamicParts]);
__instance.settleInfo.font = fontAsset;
}
else if (regex2.IsMatch(__instance.settleInfo.text))
{
Match match = regex2.Match(__instance.settleInfo.text);
int groupCount = match.Groups.Count;
List<string> dynamicParts = [];
for (int i = 1; i < groupCount; i++)
{
string groupValue = match.Groups[i].Value;
string translatedValue = StringStore.translationString.ContainsKey(groupValue) ? StringStore.translationString[groupValue] : groupValue;
dynamicParts.Add(translatedValue);
}
__instance.settleInfo.text = string.Format(StringStore.translationStringRegex[regexStr2], [.. dynamicParts]);
__instance.settleInfo.font = fontAsset;
}
}
}
}

View file

@ -0,0 +1,53 @@
using HarmonyLib;
using Il2Cpp;
using Il2CppTMPro;
using PvZ_Fusion_Translator.AssetStore;
using UnityEngine;
using UnityEngine.UI;
namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects
{
[HarmonyPatch(typeof(UIButton))]
public static class UIButton_Patch
{
[HarmonyPatch(nameof(UIButton.Start))]
[HarmonyPostfix]
private static void Start(UIButton __instance)
{
Transform txtTransform = __instance.transform.FindChild("text");
string fontPath = "";
TMP_FontAsset fontAsset = null;
if(txtTransform != null)
{
string fontsDir = Path.Combine(Core.Instance.modsDirectory, "[Custom Fonts]");
foreach (string file in Directory.GetFiles(fontsDir))
{
string fileName = Path.GetFileNameWithoutExtension(file);
string fileExtension = Path.GetExtension(file);
if (fileExtension == ".ttf" || fileExtension == ".otf")
{
if (!fileName.EndsWith("_Almanac") && !fileName.EndsWith("_Fallback"))
{
fontPath = Path.Combine("PvZ_Fusion_Translator", "[Custom Fonts]", fileName + fileExtension);
fontAsset = FontHandler.LoadTMPFont(fontPath, true);
fontAsset.name = fileName;
fontAssetDict.Add(fileName, fontAsset);
Log.LogInfo($"Font for language '{fileName}' loaded");
}
}
}
string fontPath = Path.Combine("PvZ_Fusion_Translator", "[Custom Fonts]", fileName + fileExtension);
Font fontAsset = FontHandler.LoadFont(fontPath, false);
txtTransform.GetComponent<Text>().text = StringStore.TranslateText(txtTransform.GetComponent<Text>().text);
txtTransform.GetComponent<Text>().font = fontAsset;
}
}
}
}

View file

@ -448,10 +448,12 @@
<Compile Include="Log.cs" />
<Compile Include="ModFeatures.cs" />
<Compile Include="AssetStore\AudioStore.cs" />
<Compile Include="Patches\GameObjects\AbyssSettlementMenu_Patch.cs" />
<Compile Include="Patches\GameObjects\ButtonObjects\AbyssCheckSellMenu_Patch.cs" />
<Compile Include="Patches\GameObjects\ButtonObjects\AbyssBuffButton_Patch.cs" />
<Compile Include="Patches\GameObjects\ButtonObjects\AbyssLevelEnter_Patch.cs" />
<Compile Include="Patches\GameObjects\ButtonObjects\BaseMenu_Patch.cs" />
<Compile Include="Patches\GameObjects\ButtonObjects\UIButton_Patch.cs" />
<Compile Include="Patches\GameObjects\ButtonObjects\SaveMenuBtn_Patch.cs" />
<Compile Include="Patches\GameObjects\MainMenu_Patch.cs" />
<Compile Include="Patches\GameObjects\MinorObjects\AbyssGoods_Patch.cs" />