diff --git a/MenuAPI/Menu.cs b/MenuAPI/Menu.cs index af4e3a6..cc2b7ed 100644 --- a/MenuAPI/Menu.cs +++ b/MenuAPI/Menu.cs @@ -592,6 +592,8 @@ public ButtonPressHandler(Control control, ControlPressCheckType pressType, Acti } public List ButtonPressHandlers = new List(); + public Control MenuToggleKey; + #endregion #region Constructors diff --git a/MenuAPI/MenuController.cs b/MenuAPI/MenuController.cs index 1c5ea71..6f193d1 100644 --- a/MenuAPI/MenuController.cs +++ b/MenuAPI/MenuController.cs @@ -67,13 +67,6 @@ public class MenuController : BaseScript public static bool PreventExitingMenu { get; set; } = false; public static bool DisableBackButton { get; set; } = false; public static bool SetDrawOrder { get; set; } = true; - public static Control MenuToggleKey { get; set; } -#if FIVEM - = Control.InteractionMenu; -#endif -#if REDM - = Control.PlayerMenu; -#endif public static bool EnableMenuToggleKeyOnController { get; set; } = true; @@ -235,6 +228,11 @@ public static Menu GetCurrentMenu() return null; } + public static HashSet GetCurrentOpenMenus() + { + return VisibleMenus; + } + /// /// Returns true if any menu is currently open. /// @@ -705,7 +703,6 @@ private async Task HandleDownNavigation(Menu currentMenu) private void HandleMenuToggleKeyForKeyboard() { if ( - (Game.IsControlJustPressed(0, MenuToggleKey) || Game.IsDisabledControlJustPressed(0, MenuToggleKey)) && !Game.IsPaused && !Game.Player.IsDead && !IsPlayerSwitchInProgress() && @@ -713,17 +710,8 @@ private void HandleMenuToggleKeyForKeyboard() IsScreenFadedIn() ) { - if (!Menus.Any()) - { - return; - } - if (MainMenu != null) - { - MainMenu.OpenMenu(); - } - else - { - Menus.First().OpenMenu(); + foreach (Menu menu in Menus.Where(menu => !menu.Visible && (Game.IsControlJustPressed(0, menu.MenuToggleKey) || Game.IsDisabledControlJustPressed(0, menu.MenuToggleKey)))) { + menu.OpenMenu(); } } } @@ -754,15 +742,15 @@ private async Task HandleMenuToggleKeyForController() private void DisableMenuKeyThisFrame() { - Game.DisableControlThisFrame(0, MenuToggleKey); if (Game.CurrentInputMode == InputMode.MouseAndKeyboard) { - if ((Game.IsControlJustPressed(0, MenuToggleKey) || Game.IsDisabledControlJustPressed(0, MenuToggleKey)) && !PreventExitingMenu) + var menus = new HashSet(GetCurrentOpenMenus()); + foreach (Menu menu in menus) { - var menu = GetCurrentMenu(); - if (menu != null) + Game.DisableControlThisFrame(0, menu.MenuToggleKey); + if ((Game.IsControlJustPressed(0, menu.MenuToggleKey) || Game.IsDisabledControlJustPressed(0, menu.MenuToggleKey)) && !PreventExitingMenu) { - menu.CloseMenu(); + menu?.CloseMenu(); } } }