From c68cde65f1d93c40d3b476d9ea09c128af6f413b Mon Sep 17 00:00:00 2001 From: Soar Qin Date: Fri, 15 Sep 2023 15:23:40 +0800 Subject: [PATCH] use patch to resolve tips priority --- CheatEnabler/CheatEnabler.cs | 27 +++++++++++++++++++++++++++ CheatEnabler/UI/MyWindow.cs | 6 +----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/CheatEnabler/CheatEnabler.cs b/CheatEnabler/CheatEnabler.cs index b919842..3dc54af 100644 --- a/CheatEnabler/CheatEnabler.cs +++ b/CheatEnabler/CheatEnabler.cs @@ -208,6 +208,33 @@ public class CheatEnabler : BaseUnityPlugin }); return matcher.InstructionEnumeration(); } + + [HarmonyTranspiler] + [HarmonyPatch(typeof(UIButton), nameof(UIButton.LateUpdate))] + private static IEnumerable UIButton_LateUpdate_Transpiler(IEnumerable instructions, ILGenerator generator) + { + var matcher = new CodeMatcher(instructions, generator); + matcher.MatchForward(false, + new CodeMatch(OpCodes.Ldloc_2), + new CodeMatch(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(Component), nameof(Component.gameObject))), + new CodeMatch(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(GameObject), nameof(GameObject.activeSelf))) + ).InsertAndAdvance( + new CodeInstruction(OpCodes.Ldloc_2), + new CodeInstruction(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(Component), nameof(Component.transform))), + new CodeInstruction(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(Transform), nameof(Transform.parent))), + new CodeInstruction(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(Transform), nameof(Transform.parent))), + new CodeInstruction(OpCodes.Callvirt, AccessTools.Method(typeof(Transform), nameof(Transform.SetAsLastSibling))) + ).MatchForward(false, + new CodeMatch(OpCodes.Callvirt, AccessTools.Method(typeof(UIButtonTip), nameof(UIButtonTip.SetTip))) + ).Advance(1).Insert( + new CodeInstruction(OpCodes.Ldloc_2), + new CodeInstruction(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(Component), nameof(Component.transform))), + new CodeInstruction(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(Transform), nameof(Transform.parent))), + new CodeInstruction(OpCodes.Callvirt, AccessTools.PropertyGetter(typeof(Transform), nameof(Transform.parent))), + new CodeInstruction(OpCodes.Callvirt, AccessTools.Method(typeof(Transform), nameof(Transform.SetAsLastSibling))) + ); + return matcher.InstructionEnumeration(); + } private static void ToggleConfigWindow() { diff --git a/CheatEnabler/UI/MyWindow.cs b/CheatEnabler/UI/MyWindow.cs index 5843171..e4337ca 100644 --- a/CheatEnabler/UI/MyWindow.cs +++ b/CheatEnabler/UI/MyWindow.cs @@ -29,11 +29,7 @@ public class MyWindow: ManualBehaviour public void Open() { _Open(); - } - - public override void _OnUpdate() - { - transform.SetSiblingIndex(UIRoot.instance.uiMechaEditor.transform.GetSiblingIndex() + 1); + transform.SetAsLastSibling(); } public void Close() => _Close();