PVZFusionTranslation/MelonLoader/Patches/GameObjects/MainMenu_Patch.cs
SillyStar-Github f2e4e78750 3.8 code
2026-07-15 17:17:28 -04:00

109 lines
No EOL
5.1 KiB
C#

using HarmonyLib;
using Il2Cpp;
using Il2CppTMPro;
using PvZ_Fusion_Translator.AssetStore;
using PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Rendering;
using UnityEngine.UIElements;
namespace PvZ_Fusion_Translator.Patches.GameObjects
{
[HarmonyPatch(typeof(MainMenu))]
public class MainMenu_Patch
{
public static void AnimOver(BaseMenu __instance)
{
Transform changelogObj = __instance.transform.Find("Grave/UpdateInfoButton");
Transform langObj = UnityEngine.Object.Instantiate(changelogObj, changelogObj.position + new Vector3(0.0f, 0.855f), changelogObj.rotation, __instance.transform.Find("Grave"));
langObj.name = "LanguagesButton";
__instance.collider2Ds.Add(langObj.GetComponent<Collider2D>());
UIButton langBtn = langObj.GetComponent<UIButton>();
foreach(TextMeshProUGUI text in langObj.GetComponentsInChildren<TextMeshProUGUI>())
{
text.text = StringStore.TranslateText("Languages");
}
langBtn.clickEvent = new UnityEvent();
langBtn.clickEvent.AddListener(new Action(() => OpenLanguageMenu(langBtn.gameObject)));
}
public static void OpenLanguageMenu(GameObject langBtn)
{
UIMgr.EnterOptionMenu();
GameObject newOptionsMenu = GameAPP.canvasUp.Find("OptionMenu(Clone)").gameObject;
newOptionsMenu.name = "LanguageMenu";
List<string> toKeep = new List<string>() { "Background", "F", "Goback"};
foreach(Transform child in newOptionsMenu.GetComponentsInChildren<Transform>())
{
if(!toKeep.Contains(child.name) && !toKeep.Contains(child.parent.name) && child.name != "LanguageMenu")
{
child.gameObject.SetActive(false);
}
}
OptionBtn templateButton = newOptionsMenu.transform.Find("Buttons/F").GetComponent<OptionBtn>();
OptLanguageBtn_Patch.OptLangBtn_Patch.Awake(templateButton);
UIButton goBackButton = newOptionsMenu.transform.Find("Goback").GetComponent<UIButton>();
newOptionsMenu.transform.Find("Buttons/F").gameObject.SetActive(false);
newOptionsMenu.transform.Find("Buttons").gameObject.SetActive(true);
foreach (TextMeshProUGUI text in newOptionsMenu.transform.Find("Background").GetComponentsInChildren<TextMeshProUGUI>())
{
text.text = StringStore.TranslateText("Language Settings");
}
/*GameObject optionMenuAnchor = UnityEngine.Object.Instantiate(assetBundle.LoadAsset("OptionMenu").TryCast<GameObject>(), GameAPP.canvasUp);
optionMenuAnchor.transform.SetParent(newOptionsMenu.transform, false);
Transform messageAnchor = optionMenuAnchor.transform.Find("MessageAnchor");
Transform plantAnchor = optionMenuAnchor.transform.Find("PlantAnchor");
System.Random random = new System.Random();
var plantTypes = Enum.GetValues(typeof(PlantType));
PlantType randomPlantChoice = (PlantType)plantTypes.GetValue(random.Next(plantTypes.Length));
if(!GameAPP.resourcesManager.plantPrefabs.ContainsKey(randomPlantChoice) || GameAPP.resourcesManager.plantPrefabs[randomPlantChoice] == null)
{
randomPlantChoice = (PlantType)plantTypes.GetValue(random.Next(plantTypes.Length));
}
if (GameAPP.resourcesManager.plantPrefabs[randomPlantChoice] != null)
{
GameObject plant = CreatePlant.SetPlantInAlmamac(plantAnchor.position, (int)randomPlantChoice);
plant.transform.SetParent(newOptionsMenu.transform);
SortingGroup sortingGroup = plant.AddComponent<SortingGroup>();
sortingGroup.sortingLayerName = "UI";
sortingGroup.sortingOrder = 20001;
//plant.transform.position = new Vector3(-7.21f, -3.66f);
UnityEngine.Object.Destroy(plant.GetComponent<Plant>());
}*/
/*GameObject messageObj = new GameObject();
messageObj.name = "MultilangMessage";
messageObj.transform.SetParent(newOptionsMenu.transform);
TextMeshProUGUI messageText = messageObj.AddComponent<TextMeshProUGUI>();
messageObj.transform.localScale = Vector3.one;
messageText.autoSizeTextContainer = false;
messageText.font = FontStore.LoadTMPFont(Utils.LanguageEnum.English.ToString());
messageText.text = "Hello this is multilanguage choose language over there ------>";*/
}
[HarmonyPatch(nameof(MainMenu.EnterUpdateUrl))]
[HarmonyPrefix]
public static bool Pre_EnterUpdateUrl(MainMenu __instance)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = @"https://github.com/Teyliu/PVZF-Translation",
UseShellExecute = true
});
return false;
}
}
}