diff --git a/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/BepInEx5Plugins.Ash.Alisa.KeysMenuFix.csproj b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/BepInEx5Plugins.Ash.Alisa.KeysMenuFix.csproj new file mode 100644 index 0000000..24f422a --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/BepInEx5Plugins.Ash.Alisa.KeysMenuFix.csproj @@ -0,0 +1,33 @@ + + + + net35 + BepInEx5Plugins.Ash.Alisa.KeysMenuFix + KeysMenuFix + 1.0.0 + true + 9.0 + + + + + + + + + + + + + + + + ..\lib\SteamRelease\Assembly-CSharp.dll + false + + + + + + + diff --git a/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_KeyRingUpdate.cs b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_KeyRingUpdate.cs new file mode 100644 index 0000000..b766be1 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_KeyRingUpdate.cs @@ -0,0 +1,258 @@ +using HarmonyLib; +using System; +using System.Reflection; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.KeysMenuFix.HarmonyPatches +{ + [HarmonyPatch(typeof(KeysMenuV2), "KeyRingUpdate")] + public class KeysMenuV2_KeyRingUpdate + { + private static MethodInfo KeysMenuV2_UseKey01; + private static MethodInfo KeysMenuV2_UseKey02; + private static MethodInfo KeysMenuV2_UseKey03; + private static MethodInfo KeysMenuV2_UseKey04; + private static MethodInfo KeysMenuV2_UseKey05; + private static MethodInfo KeysMenuV2_UseKey06; + private static MethodInfo KeysMenuV2_UseKey07; + private static MethodInfo KeysMenuV2_UseKey08; + + public static bool Prepare(MethodBase original) + { + if (original is null) + { + try + { + KeysMenuV2_UseKey01 = typeof(KeysMenuV2).GetMethod("UseKey01", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_UseKey02 = typeof(KeysMenuV2).GetMethod("UseKey02", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_UseKey03 = typeof(KeysMenuV2).GetMethod("UseKey03", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_UseKey04 = typeof(KeysMenuV2).GetMethod("UseKey04", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_UseKey05 = typeof(KeysMenuV2).GetMethod("UseKey05", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_UseKey06 = typeof(KeysMenuV2).GetMethod("UseKey06", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_UseKey07 = typeof(KeysMenuV2).GetMethod("UseKey07", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_UseKey08 = typeof(KeysMenuV2).GetMethod("UseKey08", BindingFlags.NonPublic | BindingFlags.Instance); + } + catch (Exception exception) + { + Console.WriteLine(exception); + return false; + } + } + + return true; + } + + // Activate/Deactivate key title objects only as necessary. + public static bool Prefix(KeysMenuV2 __instance + , ref int ___zoom + , ref Settings ___settings + ) + { + if (ProgressManager.instance.data.puzzle01Done && !__instance.key02.activeSelf) + { + ProgressManager.instance.data.keyAmount = 2; + __instance.key02.SetActive(true); + } + + if (ProgressManager.instance.data.torsoPuzzleDone && !__instance.key03.activeSelf) + { + ProgressManager.instance.data.keyAmount = 3; + __instance.key03.SetActive(true); + } + + if (ProgressManager.instance.data.clockPuzzleIsDone && !__instance.key04.activeSelf) + { + ProgressManager.instance.data.keyAmount = 4; + __instance.key04.SetActive(true); + } + + if (ProgressManager.instance.data.pianoPuzzleDone && !__instance.key05.activeSelf) + { + ProgressManager.instance.data.keyAmount = 5; + __instance.key05.SetActive(true); + } + + if (ProgressManager.instance.data.libraryPuzzleState == 2 && !__instance.key06.activeSelf) + { + ProgressManager.instance.data.keyAmount = 6; + __instance.key06.SetActive(true); + } + + if (ProgressManager.instance.data.gardenPuzzleDone && !__instance.key07.activeSelf) + { + ProgressManager.instance.data.keyAmount = 7; + __instance.key07.SetActive(true); + } + + if (ProgressManager.instance.data.boss03Defeated && !__instance.key08.activeSelf) + { + ProgressManager.instance.data.keyAmount = 8; + __instance.key08.SetActive(true); + } + + var currentKeyChanged = false; + + if ((!__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsTag("Idle") || ___zoom != 2) + && __instance.currentKey != 0) + { + __instance.currentKey = 0; + currentKeyChanged = true; + } + + if (ProgressManager.instance.data.keyAmount == 1 && __instance.keyAnim.GetInteger("KeyCount") != 1) + { + __instance.keyAnim.SetInteger("KeyCount", 1); + } + else if (ProgressManager.instance.data.keyAmount == 2 && __instance.keyAnim.GetInteger("KeyCount") != 2) + { + __instance.keyAnim.SetInteger("KeyCount", 2); + } + else if (ProgressManager.instance.data.keyAmount == 3 && __instance.keyAnim.GetInteger("KeyCount") != 3) + { + __instance.keyAnim.SetInteger("KeyCount", 3); + } + else if (ProgressManager.instance.data.keyAmount == 4 && __instance.keyAnim.GetInteger("KeyCount") != 4) + { + __instance.keyAnim.SetInteger("KeyCount", 4); + } + else if (ProgressManager.instance.data.keyAmount == 5 && __instance.keyAnim.GetInteger("KeyCount") != 5) + { + __instance.keyAnim.SetInteger("KeyCount", 5); + } + else if (ProgressManager.instance.data.keyAmount == 6 && __instance.keyAnim.GetInteger("KeyCount") != 6) + { + __instance.keyAnim.SetInteger("KeyCount", 6); + } + else if (ProgressManager.instance.data.keyAmount == 7 && __instance.keyAnim.GetInteger("KeyCount") != 7) + { + __instance.keyAnim.SetInteger("KeyCount", 7); + } + else if (ProgressManager.instance.data.keyAmount == 8 && __instance.keyAnim.GetInteger("KeyCount") != 8) + { + __instance.keyAnim.SetInteger("KeyCount", 8); + } + + if (___zoom == 2) + { + if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle1")) + { + if (__instance.currentKey != 1) + { + __instance.currentKey = 1; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey01.Invoke(__instance, null); + } + } + else if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle2")) + { + if (__instance.currentKey != 2) + { + __instance.currentKey = 2; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey02.Invoke(__instance, null); + } + } + else if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle3")) + { + if (__instance.currentKey != 3) + { + __instance.currentKey = 3; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey03.Invoke(__instance, null); + } + } + else if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle8")) + { + if (__instance.currentKey != 4) + { + __instance.currentKey = 4; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey04.Invoke(__instance, null); + } + } + else if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle7")) + { + if (__instance.currentKey != 5) + { + __instance.currentKey = 5; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey05.Invoke(__instance, null); + } + } + else if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle4")) + { + if (__instance.currentKey != 6) + { + __instance.currentKey = 6; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey06.Invoke(__instance, null); + } + } + else if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle5")) + { + if (__instance.currentKey != 7) + { + __instance.currentKey = 7; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey07.Invoke(__instance, null); + } + } + else if (__instance.keyAnim.GetCurrentAnimatorStateInfo(0).IsName("Idle6")) + { + if (__instance.currentKey != 8) + { + __instance.currentKey = 8; + currentKeyChanged = true; + } + + if (Input.GetKeyDown(___settings.keys["Action"])) + { + KeysMenuV2_UseKey08.Invoke(__instance, null); + } + } + } + + if (currentKeyChanged) + { + __instance.key01Title.SetActive(__instance.currentKey == 1); + __instance.key02Title.SetActive(__instance.currentKey == 2); + __instance.key03Title.SetActive(__instance.currentKey == 3); + __instance.key04Title.SetActive(__instance.currentKey == 4); + __instance.key05Title.SetActive(__instance.currentKey == 5); + __instance.key06Title.SetActive(__instance.currentKey == 6); + __instance.key07Title.SetActive(__instance.currentKey == 7); + __instance.key08Title.SetActive(__instance.currentKey == 8); + } + + return false; + } + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_Update.cs b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_Update.cs new file mode 100644 index 0000000..654bb3f --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_Update.cs @@ -0,0 +1,76 @@ +using HarmonyLib; +using System; +using System.Reflection; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.KeysMenuFix.HarmonyPatches +{ + [HarmonyPatch(typeof(KeysMenuV2), "Update")] + public class KeysMenuV2_Update + { + private static MethodInfo KeysMenuV2_SelectedItem; + private static MethodInfo KeysMenuV2_Move; + private static MethodInfo KeysMenuV2_Zoom; + private static MethodInfo KeysMenuV2_CloseKeysMenu; + private static MethodInfo KeysMenuV2_ItemFunction; + private static MethodInfo KeysMenuV2_KeyRingUpdate; + + public static bool Prepare(MethodBase original) + { + if (original is null) + { + try + { + KeysMenuV2_SelectedItem = typeof(KeysMenuV2).GetMethod("SelectedItem", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_Move = typeof(KeysMenuV2).GetMethod("Move", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_Zoom = typeof(KeysMenuV2).GetMethod("Zoom", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_CloseKeysMenu = typeof(KeysMenuV2).GetMethod("CloseKeysMenu", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_ItemFunction = typeof(KeysMenuV2).GetMethod("ItemFunction", BindingFlags.NonPublic | BindingFlags.Instance); + KeysMenuV2_KeyRingUpdate = typeof(KeysMenuV2).GetMethod("KeyRingUpdate", BindingFlags.NonPublic | BindingFlags.Instance); + } + catch (Exception exception) + { + Console.WriteLine(exception); + return false; + } + } + + return true; + } + + // Call the Zoom method even if currentSelectedItem is null. + public static void Postfix(KeysMenuV2 __instance) + { + if (!__instance.locked) + { + __instance.RayCheckItem(); + KeysMenuV2_SelectedItem.Invoke(__instance, null); + KeysMenuV2_Move.Invoke(__instance, null); + KeysMenuV2_Zoom.Invoke(__instance, null); + + if (__instance.currentSelectedItem) + { + KeysMenuV2_CloseKeysMenu.Invoke(__instance, null); + KeysMenuV2_ItemFunction.Invoke(__instance, null); + } + + if (__instance.keyRing_Obj.activeSelf) + { + KeysMenuV2_KeyRingUpdate.Invoke(__instance, null); + } + } + + if (__instance.locked + && __instance.currentSelectedItem) + { + __instance.currentSelectedItem.transform.rotation = Quaternion.identity; + } + + if (!__instance.itemList.itemsTotal[0].activeSelf + && __instance.titleNone.activeSelf) + { + __instance.titleNone.SetActive(false); + } + } + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_Zoom.cs b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_Zoom.cs new file mode 100644 index 0000000..21b15e9 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/HarmonyPatches/KeysMenuV2_Zoom.cs @@ -0,0 +1,76 @@ +using HarmonyLib; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.KeysMenuFix.HarmonyPatches +{ + [HarmonyPatch(typeof(KeysMenuV2), "Zoom")] + public class KeysMenuV2_Zoom + { + // Check if currentSelectedItem is null before referencing it. + public static bool Prefix(KeysMenuV2 __instance + , ref Settings ___settings + , ref bool ___moving + , ref int ___zoom + , ref Vector3 ___zoomedIn + , ref float ___moveSpeed + , ref AudioSource ___audioSource + ) + { + if (__instance.currentSelectedItem + && __instance.currentSelectedItem.name == "KeyRing" + && Input.GetKeyDown(___settings.keys["Action"]) + && ___zoom == 0 + && !___moving) + { + ___zoom = 1; + ___moving = true; + __instance.currentSelectedItem.transform.rotation = Quaternion.identity; + ___audioSource.PlayOneShot(__instance.keyRingZoomInSound, 1f); + } + else if (__instance.currentSelectedItem + && __instance.currentSelectedItem.name == "KeyRing" + && Input.GetKeyDown(___settings.keys["Cancel"]) + && ___zoom == 2) + { + ___zoom = 3; + ___audioSource.PlayOneShot(__instance.keyRingZoomOutSound, 1f); + } + + if (___zoom == 1) + { + __instance.rayPoint.localPosition = Vector3.MoveTowards(__instance.rayPoint.localPosition, ___zoomedIn, ___moveSpeed * Time.deltaTime); + + if (__instance.rayPoint.localPosition == ___zoomedIn) + { + ___zoom = 2; + } + } + else if (___zoom == 3) + { + __instance.rayPoint.localPosition = Vector3.MoveTowards(__instance.rayPoint.localPosition, Vector3.zero, ___moveSpeed * Time.deltaTime); + + if (__instance.rayPoint.localPosition == Vector3.zero) + { + ___zoom = 0; + ___moving = false; + } + } + + if (__instance.currentSelectedItem + && __instance.currentSelectedItem.name == "KeyRing" + && ___zoom == 0 + && !__instance.keyRingTitle.activeSelf) + { + __instance.keyRingTitle.SetActive(true); + } + else if ((__instance.currentSelectedItem + && __instance.currentSelectedItem.name != "KeyRing" || ___zoom != 0) + && __instance.keyRingTitle.activeSelf) + { + __instance.keyRingTitle.SetActive(false); + } + + return false; + } + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/NuGet.Config b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/NuGet.Config new file mode 100644 index 0000000..1864ded --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/Plugin.cs b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/Plugin.cs new file mode 100644 index 0000000..3fc377c --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.KeysMenuFix/Plugin.cs @@ -0,0 +1,26 @@ +using BepInEx; +using HarmonyLib; +using System; + +namespace BepInEx5Plugins.Ash.Alisa.KeysMenuFix +{ + [BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)] + public class Plugin : BaseUnityPlugin + { + private void Awake() + { + try + { + Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded!"); + + var harmony = new Harmony(Info.Metadata.GUID); + + harmony.PatchAll(); + } + catch (Exception exception) + { + Console.WriteLine(exception); + } + } + } +}