diff --git a/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix.csproj b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix.csproj new file mode 100644 index 0000000..e269c73 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix.csproj @@ -0,0 +1,37 @@ + + + + net35 + BepInEx5Plugins.Ash.Alisa.ControlsMenuFix + ControlsMenuFix + 1.0.0 + true + 9.0 + + + + + + + + + + + + + + + + ..\lib\SteamRelease\Assembly-CSharp.dll + false + + + ..\lib\UnityEngine\UnityEngine.UI.dll + false + + + + + + + diff --git a/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/HarmonyPatches/ControlsMenuType_Update.cs b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/HarmonyPatches/ControlsMenuType_Update.cs new file mode 100644 index 0000000..cf2df54 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/HarmonyPatches/ControlsMenuType_Update.cs @@ -0,0 +1,203 @@ +using HarmonyLib; +using System; +using System.Reflection; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace BepInEx5Plugins.Ash.Alisa.ControlsMenuFix.HarmonyPatches +{ + [HarmonyPatch(typeof(ControlsMenuType), "Update")] + public class ControlsMenuType_Update + { + private static FieldInfo MainMenu_audioSource; + + private static FieldInfo PauseMenu_audioSource; + + public static bool Prepare(MethodBase original) + { + if (original is null) + { + try + { + MainMenu_audioSource = typeof(MainMenu).GetField("audioSource", BindingFlags.NonPublic | BindingFlags.Instance); + PauseMenu_audioSource = typeof(PauseMenu).GetField("audioSource", BindingFlags.NonPublic | BindingFlags.Instance); + } + catch (Exception exception) + { + Console.WriteLine(exception); + return false; + } + } + + return true; + } + + // Check if audioSource is null before referencing it, + // automatically assign it to an appopriate value if necessary. + public static bool Prefix(ControlsMenuType __instance + , ref Settings ___settings + , ref bool ___buttonPressed + ) + { + if (!__instance.audioSource) + { + Console.WriteLine("<" + __instance.name + ">" + "ControlsMenuType_Update.Prefix: audioSource is null! Auto fixing..."); + + if (__instance.mainMenu) + { + __instance.audioSource = (AudioSource)MainMenu_audioSource.GetValue(__instance.mainMenu); + } + else if (__instance.pauseMenu) + { + __instance.audioSource = (AudioSource)PauseMenu_audioSource.GetValue(__instance.pauseMenu); + } + else + { + Console.WriteLine("<" + __instance.name + ">" + "ControlsMenuType_Update.Prefix: Both main and pause menu references are null!"); + } + } + + if (!(EventSystem.current.currentSelectedGameObject == __instance.gameObject)) + { + return false; + } + + if (!___buttonPressed) + { + if (Input.GetAxis("Horizontal") != 0f + || Input.GetAxis(___settings.customHorizontalAxis) != 0f) + { + if (!__instance.xboxControllerType) + { + if (__instance.mainMenu) + { + __instance.mainMenu.ButtonTypeSwitch(); + } + else if (__instance.pauseMenu) + { + __instance.pauseMenu.ButtonTypeSwitch(); + } + + if (__instance.audioSource) + { + __instance.audioSource.PlayOneShot(__instance.moveSelected, 1f); + } + } + else + { + if (__instance.mainMenu) + { + __instance.mainMenu.XboxControlTypeSwitch(); + } + else if (__instance.pauseMenu) + { + __instance.pauseMenu.XboxControlTypeSwitch(); + } + + if (__instance.audioSource) + { + __instance.audioSource.PlayOneShot(__instance.moveSelected, 1f); + } + } + + ___buttonPressed = true; + } + + if (___settings.keyboardAlt > 0) + { + if (Input.GetAxis("Horizontal_WASD") == 0f) + { + return false; + } + + if (!__instance.xboxControllerType) + { + if (__instance.mainMenu) + { + __instance.mainMenu.ButtonTypeSwitch(); + } + else if (__instance.pauseMenu) + { + __instance.pauseMenu.ButtonTypeSwitch(); + } + + if (__instance.audioSource) + { + __instance.audioSource.PlayOneShot(__instance.moveSelected, 1f); + } + } + else + { + if (__instance.mainMenu) + { + __instance.mainMenu.XboxControlTypeSwitch(); + } + else if (__instance.pauseMenu) + { + __instance.pauseMenu.XboxControlTypeSwitch(); + } + + if (__instance.audioSource) + { + __instance.audioSource.PlayOneShot(__instance.moveSelected, 1f); + } + } + + ___buttonPressed = true; + } + else + { + if (___settings.keyboardAlt >= 0 + || Input.GetAxis("Horizontal_ZQSD") == 0f) + { + return false; + } + + if (!__instance.xboxControllerType) + { + if (__instance.mainMenu) + { + __instance.mainMenu.ButtonTypeSwitch(); + } + else if (__instance.pauseMenu) + { + __instance.pauseMenu.ButtonTypeSwitch(); + } + + if (__instance.audioSource) + { + __instance.audioSource.PlayOneShot(__instance.moveSelected, 1f); + } + } + else + { + if (__instance.mainMenu) + { + __instance.mainMenu.XboxControlTypeSwitch(); + } + else if (__instance.pauseMenu) + { + __instance.pauseMenu.XboxControlTypeSwitch(); + } + + if (__instance.audioSource) + { + __instance.audioSource.PlayOneShot(__instance.moveSelected, 1f); + } + } + + ___buttonPressed = true; + } + } + else if (Input.GetAxis("Horizontal") == 0f + && Input.GetAxis(___settings.customHorizontalAxis) == 0f + && Input.GetAxis("Horizontal_WASD") == 0f + && Input.GetAxis("Horizontal_ZQSD") == 0f) + { + ___buttonPressed = false; + } + + return false; + } + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/NuGet.Config b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/NuGet.Config new file mode 100644 index 0000000..1864ded --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/Plugin.cs b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/Plugin.cs new file mode 100644 index 0000000..f0bd075 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.ControlsMenuFix/Plugin.cs @@ -0,0 +1,26 @@ +using BepInEx; +using HarmonyLib; +using System; + +namespace BepInEx5Plugins.Ash.Alisa.ControlsMenuFix +{ + [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); + } + } + } +}