From b0078bf9c83232a308da92545512cc593403e139 Mon Sep 17 00:00:00 2001 From: zieserl Date: Sun, 15 Aug 2021 15:30:03 +0200 Subject: [PATCH 1/2] Add multiple menu toggling support --- MenuAPI/Menu.cs | 2 ++ MenuAPI/MenuController.cs | 35 +++++++++++++++-------------------- 2 files changed, 17 insertions(+), 20 deletions(-) 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..c151d75 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() && @@ -717,13 +714,8 @@ private void HandleMenuToggleKeyForKeyboard() { 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 +746,18 @@ 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(); + if (menu != null) + { + menu.CloseMenu(); + } } } } From 139570ad1c79b8f3a599389dd8695bdc10df1670 Mon Sep 17 00:00:00 2001 From: zieserl Date: Sun, 15 Aug 2021 15:33:02 +0200 Subject: [PATCH 2/2] Remove unnecessary checks --- MenuAPI/MenuController.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/MenuAPI/MenuController.cs b/MenuAPI/MenuController.cs index c151d75..6f193d1 100644 --- a/MenuAPI/MenuController.cs +++ b/MenuAPI/MenuController.cs @@ -710,10 +710,6 @@ private void HandleMenuToggleKeyForKeyboard() IsScreenFadedIn() ) { - if (!Menus.Any()) - { - return; - } foreach (Menu menu in Menus.Where(menu => !menu.Visible && (Game.IsControlJustPressed(0, menu.MenuToggleKey) || Game.IsDisabledControlJustPressed(0, menu.MenuToggleKey)))) { menu.OpenMenu(); } @@ -754,10 +750,7 @@ private void DisableMenuKeyThisFrame() Game.DisableControlThisFrame(0, menu.MenuToggleKey); if ((Game.IsControlJustPressed(0, menu.MenuToggleKey) || Game.IsDisabledControlJustPressed(0, menu.MenuToggleKey)) && !PreventExitingMenu) { - if (menu != null) - { - menu.CloseMenu(); - } + menu?.CloseMenu(); } } }