From 60e4f682a8fb338bb5c2f596a3b89b4d5ff1b183 Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:19:54 +0000 Subject: [PATCH 01/11] expose SetInputFieldPlaceholderText --- src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs b/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs index ac1da627..821ae635 100644 --- a/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs +++ b/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs @@ -12,6 +12,8 @@ public interface IOWMLPopupInputMenu public InputField GetInputField(); + public void SetInputFieldPlaceholderText(string text); + public event PopupMenu.PopupConfirmEvent OnPopupConfirm; } } From 50b56e62640c6d65952cd6d2307b40c9f7345d8c Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:20:10 +0000 Subject: [PATCH 02/11] add SetMessage extension for PopupMenu --- src/OWML.Utils/MenuExtensions.cs | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/OWML.Utils/MenuExtensions.cs diff --git a/src/OWML.Utils/MenuExtensions.cs b/src/OWML.Utils/MenuExtensions.cs new file mode 100644 index 00000000..74cb9732 --- /dev/null +++ b/src/OWML.Utils/MenuExtensions.cs @@ -0,0 +1,7 @@ +namespace OWML.Utils +{ + public static class MenuExtensions + { + public static void SetMessage(this PopupMenu menu, string message) => menu._labelText.text = message; + } +} From 2fecc50dcfddd30c47af45567d65920760aaedd8 Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:45:24 +0000 Subject: [PATCH 03/11] add pause & title buttons to language controller --- .../NewMenuSystem/PauseMenuManager.cs | 13 +++++++++++++ .../NewMenuSystem/TitleMenuManager.cs | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs b/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs index 89e68b79..a614570a 100644 --- a/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs +++ b/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs @@ -14,6 +14,7 @@ namespace OWML.ModHelper.Menus.NewMenuSystem public class PauseMenuManager : IPauseMenuManager { private IModConsole _console; + private FontAndLanguageController _languageController; private GameObject _pauseMenuItemsTemplate; private GameObject _buttonPrefab; @@ -23,6 +24,16 @@ public PauseMenuManager(IModConsole console) _console = console; } + private void AddToLangController(Text textComponent) + { + if (_languageController == null) + { + _languageController = Resources.FindObjectsOfTypeAll()[0].transform.GetChild(0).GetComponent(); + } + + _languageController.AddTextElement(textComponent, false); + } + private void MakePauseMenuItemsTemplate() { var existingPauseMenuItems = GameObject.Find("PauseMenu/PauseMenuCanvas/PauseMenuBlock/PauseMenuItems"); @@ -89,6 +100,7 @@ public SubmitAction MakeSimpleButton(string name, int index, bool fromTop, Menu SetButtonText(submitAction, name); SetButtonIndex(submitAction, index, fromTop); + AddToLangController(submitAction.GetComponentInChildren()); return submitAction; } @@ -108,6 +120,7 @@ public SubmitAction MakeMenuOpenButton(string name, Menu menuToOpen, int index, SetButtonText(submitActionMenu, name); SetButtonIndex(submitActionMenu, index, fromTop); + AddToLangController(submitActionMenu.GetComponentInChildren()); menuRootObject.SetActive(true); return submitActionMenu; diff --git a/src/OWML.ModHelper.Menus/NewMenuSystem/TitleMenuManager.cs b/src/OWML.ModHelper.Menus/NewMenuSystem/TitleMenuManager.cs index 4f0923c3..41b1dbda 100644 --- a/src/OWML.ModHelper.Menus/NewMenuSystem/TitleMenuManager.cs +++ b/src/OWML.ModHelper.Menus/NewMenuSystem/TitleMenuManager.cs @@ -10,6 +10,18 @@ namespace OWML.ModHelper.Menus.NewMenuSystem { internal class TitleMenuManager : ITitleMenuManager { + private FontAndLanguageController _languageController; + + private void AddToLangController(Text textComponent) + { + if (_languageController == null) + { + _languageController = GameObject.Find("MainMenu").GetComponent(); + } + + _languageController.AddTextElement(textComponent, false); + } + public SubmitAction CreateTitleButton(string text, int index, bool fromTop) { var titleScreenManager = Object.FindObjectOfType(); @@ -27,6 +39,7 @@ public SubmitAction CreateTitleButton(string text, int index, bool fromTop) SetButtonIndex(submitAction, index, fromTop); SetButtonText(submitAction, text); + AddToLangController(submitAction.GetComponentInChildren()); newButton.GetComponent().alpha = 0; var animController = GameObject.Find("TitleMenuManagers").GetComponent(); From ba8fdb35a436161e7c8f0a5e45e9d87c58baba7b Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:45:51 +0000 Subject: [PATCH 04/11] fixed title screen being inited multiple times --- .../NewMenuSystem/MenuManager.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs b/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs index 0c2944a5..1ed1d9b3 100644 --- a/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs +++ b/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs @@ -38,6 +38,8 @@ enum SettingType internal static Menu OWMLSettingsMenu; internal static List<(IModBehaviour behaviour, Menu modMenu)> ModSettingsMenus = new(); + private bool _hasSetupMenusThisScene = false; + public MenuManager( IModConsole console, IHarmonyHelper harmony, @@ -58,7 +60,8 @@ public MenuManager( LoadManager.OnCompleteSceneLoad += (_, newScene) => { - if (newScene is OWScene.SolarSystem or OWScene.EyeOfTheUniverse) + _hasSetupMenusThisScene = false; + if (newScene is OWScene.SolarSystem or OWScene.EyeOfTheUniverse) { SetupMenus(((IMenuManager)this).ModList); } @@ -67,6 +70,13 @@ public MenuManager( internal void SetupMenus(IList modList) { + if (_hasSetupMenusThisScene) + { + return; + } + + _hasSetupMenusThisScene = true; + void SaveConfig() { JsonHelper.SaveJsonObject($"{_owmlConfig.OWMLPath}{Constants.OwmlConfigFileName}", _owmlConfig); From e2c32b45e6d71ce1e4e53978111620e71dfe0687 Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:46:14 +0000 Subject: [PATCH 05/11] Update OWML.Manifest.json --- src/OWML.Launcher/OWML.Manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OWML.Launcher/OWML.Manifest.json b/src/OWML.Launcher/OWML.Manifest.json index a00dac6a..e2042e01 100644 --- a/src/OWML.Launcher/OWML.Manifest.json +++ b/src/OWML.Launcher/OWML.Manifest.json @@ -3,7 +3,7 @@ "author": "Alek", "name": "OWML", "uniqueName": "Alek.OWML", - "version": "2.10.3", + "version": "2.10.4", "minGameVersion": "1.1.14.768", "maxGameVersion": "1.1.14.768" } From d3376f9dcdc7bb4ca566db4a0dc7eaffa0bebb35 Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Mar 2024 13:49:18 +0000 Subject: [PATCH 06/11] pass managers in methods, add docs --- src/OWML.Common/Interfaces/IModBehaviour.cs | 22 ++++++++++---- .../NewMenuSystem/MenuManager.cs | 6 ++-- src/OWML.ModHelper/ModBehaviour.cs | 6 ++-- .../OWML.LoadCustomAssets/LoadCustomAssets.cs | 30 +++++++++---------- 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/OWML.Common/Interfaces/IModBehaviour.cs b/src/OWML.Common/Interfaces/IModBehaviour.cs index 3decad16..018fe1cf 100644 --- a/src/OWML.Common/Interfaces/IModBehaviour.cs +++ b/src/OWML.Common/Interfaces/IModBehaviour.cs @@ -16,11 +16,23 @@ public interface IModBehaviour object GetApi(); - void SetupTitleMenu(); - - void SetupPauseMenu(); - - void SetupOptionsMenu(); + /// + /// Called when the title screen has loaded in. + /// Put any code that edits the title menu here. + /// + void SetupTitleMenu(ITitleMenuManager titleManager); + + /// + /// Called when the SolarSystem or EyeOfTheUniverse scene has loaded in. + /// Put any code that edits the pause menu here. + /// + void SetupPauseMenu(IPauseMenuManager pauseManager); + + /// + /// Called when the main menu or game has loaded in. + /// Put any code that edits the options menu here. + /// + void SetupOptionsMenu(IOptionsMenuManager optionsManager); void Init(IModHelper helper); } diff --git a/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs b/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs index 1ed1d9b3..8e511fcf 100644 --- a/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs +++ b/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs @@ -321,14 +321,14 @@ void SaveConfig() { if (LoadManager.GetCurrentScene() == OWScene.TitleScreen) { - mod.SetupTitleMenu(); + mod.SetupTitleMenu(mod.ModHelper.MenuHelper.TitleMenuManager); } else if (LoadManager.GetCurrentScene() is OWScene.SolarSystem or OWScene.EyeOfTheUniverse) { - mod.SetupPauseMenu(); + mod.SetupPauseMenu(mod.ModHelper.MenuHelper.PauseMenuManager); } - mod.SetupOptionsMenu(); + mod.SetupOptionsMenu(mod.ModHelper.MenuHelper.OptionsMenuManager); } catch (Exception ex) { diff --git a/src/OWML.ModHelper/ModBehaviour.cs b/src/OWML.ModHelper/ModBehaviour.cs index eb77aaf5..5fa3e8b2 100644 --- a/src/OWML.ModHelper/ModBehaviour.cs +++ b/src/OWML.ModHelper/ModBehaviour.cs @@ -24,15 +24,15 @@ public virtual void Configure(IModConfig config) public virtual object GetApi() => null; - public virtual void SetupTitleMenu() + public virtual void SetupTitleMenu(ITitleMenuManager titleManager) { } - public virtual void SetupPauseMenu() + public virtual void SetupPauseMenu(IPauseMenuManager pauseManager) { } - public virtual void SetupOptionsMenu() + public virtual void SetupOptionsMenu(IOptionsMenuManager optionsManager) { } diff --git a/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs b/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs index 7b8a136a..3799cde0 100644 --- a/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs +++ b/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs @@ -50,30 +50,30 @@ public void Start() ModHelper.MenuHelper.PopupMenuManager.RegisterStartupPopup("Test Startup Popup"); } - public override void SetupTitleMenu() + public override void SetupTitleMenu(ITitleMenuManager titleManager) { - var infoButton = ModHelper.MenuHelper.TitleMenuManager.CreateTitleButton("INFO POPUP"); + var infoButton = titleManager.CreateTitleButton("INFO POPUP"); var infoPopup = ModHelper.MenuHelper.PopupMenuManager.CreateInfoPopup("test info popup", "yarp"); infoButton.OnSubmitAction += () => infoPopup.EnableMenu(true); - var twoChoiceButton = ModHelper.MenuHelper.TitleMenuManager.CreateTitleButton("TWO CHOICE"); + var twoChoiceButton = titleManager.CreateTitleButton("TWO CHOICE"); var twoChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateTwoChoicePopup("test two choice popup", "oak", "narp"); twoChoiceButton.OnSubmitAction += () => twoChoicePopup.EnableMenu(true); - var threeChoiceButton = ModHelper.MenuHelper.TitleMenuManager.CreateTitleButton("THREE CHOICE"); + var threeChoiceButton = titleManager.CreateTitleButton("THREE CHOICE"); var threeChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateThreeChoicePopup("test three choice popup", "oak", "oak (better)", "narp"); threeChoiceButton.OnSubmitAction += () => threeChoicePopup.EnableMenu(true); threeChoicePopup.OnPopupConfirm1 += () => ModHelper.Console.WriteLine("Confirm 1"); threeChoicePopup.OnPopupConfirm2 += () => ModHelper.Console.WriteLine("Confirm 2"); - var fourChoiceButton = ModHelper.MenuHelper.TitleMenuManager.CreateTitleButton("FOUR CHOICE"); + var fourChoiceButton = titleManager.CreateTitleButton("FOUR CHOICE"); var fourChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateFourChoicePopup("test four choice popup", "oak", "oak (better)", "oak (worse)", "narp"); fourChoiceButton.OnSubmitAction += () => fourChoicePopup.EnableMenu(true); fourChoicePopup.OnPopupConfirm1 += () => ModHelper.Console.WriteLine("Confirm 1"); fourChoicePopup.OnPopupConfirm2 += () => ModHelper.Console.WriteLine("Confirm 2"); fourChoicePopup.OnPopupConfirm3 += () => ModHelper.Console.WriteLine("Confirm 3"); - var textButton = ModHelper.MenuHelper.TitleMenuManager.CreateTitleButton("INPUT POPUP TEST"); + var textButton = titleManager.CreateTitleButton("INPUT POPUP TEST"); var textPopup = ModHelper.MenuHelper.PopupMenuManager.CreateInputFieldPopup("test text popup", "type a funny thing!", "ok", "cancel"); textButton.OnSubmitAction += () => textPopup.EnableMenu(true); textPopup.OnPopupConfirm += () => @@ -84,25 +84,25 @@ public override void SetupTitleMenu() } - public override void SetupPauseMenu() + public override void SetupPauseMenu(IPauseMenuManager pauseManager) { - var pauseMenuManager = ModHelper.MenuHelper.PauseMenuManager; + var listMenu = pauseManager.MakePauseListMenu("TEST"); + var button = pauseManager.MakeMenuOpenButton("TEST", listMenu, 1, true); - var listMenu = pauseMenuManager.MakePauseListMenu("TEST"); - var button = pauseMenuManager.MakeMenuOpenButton("TEST", listMenu, 1, true); + var button1 = pauseManager.MakeSimpleButton("1", 0, true, listMenu); + var button2 = pauseManager.MakeSimpleButton("2", 1, true, listMenu); + var button3 = pauseManager.MakeSimpleButton("3", 2, true, listMenu); - var button1 = pauseMenuManager.MakeSimpleButton("1", 0, true, listMenu); - var button2 = pauseMenuManager.MakeSimpleButton("2", 1, true, listMenu); - var button3 = pauseMenuManager.MakeSimpleButton("3", 2, true, listMenu); + pauseManager.PauseMenuOpened += () => ModHelper.Console.WriteLine($"PAUSE MENU OPENED!", MessageType.Success); + pauseManager.PauseMenuClosed += () => ModHelper.Console.WriteLine($"PAUSE MENU CLOSED!", MessageType.Success); } - public override void SetupOptionsMenu() + public override void SetupOptionsMenu(IOptionsMenuManager optionsManager) { var infoPopup = ModHelper.MenuHelper.PopupMenuManager.CreateInfoPopup("test info popup", "yarp"); var twoChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateTwoChoicePopup("test two choice popup", "oak", "narp"); var threeChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateThreeChoicePopup("test three choice popup", "oak", "oak (better)", "narp"); - var optionsManager = ModHelper.MenuHelper.OptionsMenuManager; var (tabMenu, tabButton) = optionsManager.CreateTabWithSubTabs("TEST"); var (subTab1Menu, subTab1Button) = optionsManager.AddSubTab(tabMenu, "TAB 1"); var (subTab2Menu, subTab2Button) = optionsManager.AddSubTab(tabMenu, "TAB 2"); From 8837789157b20ea5837f117174011fd080cf29cb Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Mar 2024 13:49:34 +0000 Subject: [PATCH 07/11] Add pausemenuopened/closed events --- .../Interfaces/Menus/IPauseMenuManager.cs | 15 +++++++++- .../NewMenuSystem/PauseMenuManager.cs | 28 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/OWML.Common/Interfaces/Menus/IPauseMenuManager.cs b/src/OWML.Common/Interfaces/Menus/IPauseMenuManager.cs index 5e9e88b8..d1208ec5 100644 --- a/src/OWML.Common/Interfaces/Menus/IPauseMenuManager.cs +++ b/src/OWML.Common/Interfaces/Menus/IPauseMenuManager.cs @@ -1,7 +1,20 @@ -namespace OWML.Common +using System; +using UnityEngine; + +namespace OWML.Common { public interface IPauseMenuManager { + /// + /// Called when the pause menu is opened. + /// + event Action PauseMenuOpened; + + /// + /// Called when the pause menu is closed. + /// + event Action PauseMenuClosed; + /// /// Makes another list of buttons that can be seen in the pause menu. /// diff --git a/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs b/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs index a614570a..7a784e89 100644 --- a/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs +++ b/src/OWML.ModHelper.Menus/NewMenuSystem/PauseMenuManager.cs @@ -15,13 +15,39 @@ public class PauseMenuManager : IPauseMenuManager { private IModConsole _console; private FontAndLanguageController _languageController; - private GameObject _pauseMenuItemsTemplate; private GameObject _buttonPrefab; + public event Action PauseMenuOpened; + public event Action PauseMenuClosed; + public PauseMenuManager(IModConsole console) { _console = console; + LoadManager.OnCompleteSceneLoad += OnSceneLoadCompleted; + } + + private void OnSceneLoadCompleted(OWScene old, OWScene newScene) + { + if (newScene is OWScene.SolarSystem or OWScene.EyeOfTheUniverse) + { + var pauseMenuManager = Resources.FindObjectsOfTypeAll()[0]; + pauseMenuManager._pauseMenu.OnActivateMenu += () => + { + if (!pauseMenuManager.IsOpen()) + { + PauseMenuOpened?.SafeInvoke(); + } + }; + + pauseMenuManager._pauseMenu.OnDeactivateMenu += () => + { + if (MenuStackManager.SharedInstance.GetMenuCount() == 0) + { + PauseMenuClosed?.SafeInvoke(); + } + }; + } } private void AddToLangController(Text textComponent) From 4cd8ffa3069408a63892b612905abb02039749a2 Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Fri, 22 Mar 2024 10:29:40 +0000 Subject: [PATCH 08/11] add cleanup methods --- src/OWML.Common/Interfaces/IModBehaviour.cs | 15 ++++++++++ .../NewMenuSystem/MenuManager.cs | 17 +++++++++++ src/OWML.ModHelper/ModBehaviour.cs | 15 ++++------ .../OWML.LoadCustomAssets/LoadCustomAssets.cs | 30 +++++++++++++++++-- 4 files changed, 66 insertions(+), 11 deletions(-) diff --git a/src/OWML.Common/Interfaces/IModBehaviour.cs b/src/OWML.Common/Interfaces/IModBehaviour.cs index 018fe1cf..fa8f827b 100644 --- a/src/OWML.Common/Interfaces/IModBehaviour.cs +++ b/src/OWML.Common/Interfaces/IModBehaviour.cs @@ -22,18 +22,33 @@ public interface IModBehaviour /// void SetupTitleMenu(ITitleMenuManager titleManager); + /// + /// Called when leaving the title menu scene. Put any event unsubscriptions here. + /// + void CleanupTitleMenu(); + /// /// Called when the SolarSystem or EyeOfTheUniverse scene has loaded in. /// Put any code that edits the pause menu here. /// void SetupPauseMenu(IPauseMenuManager pauseManager); + /// + /// Called when leaving either game scene. Put any event unsubscriptions here. + /// + void CleanupPauseMenu(); + /// /// Called when the main menu or game has loaded in. /// Put any code that edits the options menu here. /// void SetupOptionsMenu(IOptionsMenuManager optionsManager); + /// + /// Called when leaving the title or either game scene. Put any event unsubscriptions here. + /// + void CleanupOptionsMenu(); + void Init(IModHelper helper); } } diff --git a/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs b/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs index 8e511fcf..f16142ff 100644 --- a/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs +++ b/src/OWML.ModHelper.Menus/NewMenuSystem/MenuManager.cs @@ -58,6 +58,23 @@ public MenuManager( var harmonyInstance = harmony.GetValue("_harmony"); harmonyInstance.PatchAll(typeof(Patches)); + LoadManager.OnStartSceneLoad += (oldScene, newScene) => + { + foreach (var mod in ((IMenuManager)this).ModList) + { + if (oldScene == OWScene.TitleScreen) + { + mod.CleanupTitleMenu(); + mod.CleanupOptionsMenu(); + } + else if (oldScene is OWScene.SolarSystem or OWScene.EyeOfTheUniverse) + { + mod.CleanupPauseMenu(); + mod.CleanupOptionsMenu(); + } + } + }; + LoadManager.OnCompleteSceneLoad += (_, newScene) => { _hasSetupMenusThisScene = false; diff --git a/src/OWML.ModHelper/ModBehaviour.cs b/src/OWML.ModHelper/ModBehaviour.cs index 5fa3e8b2..31f2588d 100644 --- a/src/OWML.ModHelper/ModBehaviour.cs +++ b/src/OWML.ModHelper/ModBehaviour.cs @@ -24,17 +24,14 @@ public virtual void Configure(IModConfig config) public virtual object GetApi() => null; - public virtual void SetupTitleMenu(ITitleMenuManager titleManager) - { - } + public virtual void SetupTitleMenu(ITitleMenuManager titleManager) { } + public virtual void CleanupTitleMenu() { } - public virtual void SetupPauseMenu(IPauseMenuManager pauseManager) - { - } + public virtual void SetupPauseMenu(IPauseMenuManager pauseManager) { } + public virtual void CleanupPauseMenu() { } - public virtual void SetupOptionsMenu(IOptionsMenuManager optionsManager) - { - } + public virtual void SetupOptionsMenu(IOptionsMenuManager optionsManager) { } + public virtual void CleanupOptionsMenu() { } public IList GetDependants() => ModHelper.Interaction.GetDependants(ModHelper.Manifest.UniqueName); diff --git a/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs b/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs index 3799cde0..ff87e024 100644 --- a/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs +++ b/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs @@ -84,6 +84,11 @@ public override void SetupTitleMenu(ITitleMenuManager titleManager) } + public override void CleanupTitleMenu() + { + ModHelper.Console.WriteLine($"CLEANUP TITLE MENU"); + } + public override void SetupPauseMenu(IPauseMenuManager pauseManager) { var listMenu = pauseManager.MakePauseListMenu("TEST"); @@ -93,8 +98,24 @@ public override void SetupPauseMenu(IPauseMenuManager pauseManager) var button2 = pauseManager.MakeSimpleButton("2", 1, true, listMenu); var button3 = pauseManager.MakeSimpleButton("3", 2, true, listMenu); - pauseManager.PauseMenuOpened += () => ModHelper.Console.WriteLine($"PAUSE MENU OPENED!", MessageType.Success); - pauseManager.PauseMenuClosed += () => ModHelper.Console.WriteLine($"PAUSE MENU CLOSED!", MessageType.Success); + pauseManager.PauseMenuOpened += LogOpened; + pauseManager.PauseMenuClosed += LogClosed; + } + + public override void CleanupPauseMenu() + { + ModHelper.MenuHelper.PauseMenuManager.PauseMenuOpened -= LogOpened; + ModHelper.MenuHelper.PauseMenuManager.PauseMenuClosed -= LogClosed; + } + + private void LogOpened() + { + ModHelper.Console.WriteLine($"PAUSE MENU OPENED!", MessageType.Success); + } + + private void LogClosed() + { + ModHelper.Console.WriteLine($"PAUSE MENU CLOSED!", MessageType.Success); } public override void SetupOptionsMenu(IOptionsMenuManager optionsManager) @@ -120,6 +141,11 @@ public override void SetupOptionsMenu(IOptionsMenuManager optionsManager) var slider = optionsManager.AddSliderInput(subTab2Menu, "Test Slider", 0, 100, "* It's a test slider.", 50); } + public override void CleanupOptionsMenu() + { + ModHelper.Console.WriteLine($"CLEANUP OPTIONS MENU"); + } + private void TestAPI() { var api = ModHelper.Interaction.TryGetModApi("_nebula.ExampleAPI"); From 0e7de3f7a98f912d6cb45d7c851461132acd41b0 Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Fri, 22 Mar 2024 10:43:59 +0000 Subject: [PATCH 09/11] expose OnActivateMenu for popups --- .../Interfaces/Menus/IOWMLFourChoicePopupMenu.cs | 3 +++ .../Interfaces/Menus/IOWMLPopupInputMenu.cs | 2 ++ .../Interfaces/Menus/IOWMLThreeChoicePopupMenu.cs | 3 +++ .../OWML.LoadCustomAssets/LoadCustomAssets.cs | 11 ++++++++++- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/OWML.Common/Interfaces/Menus/IOWMLFourChoicePopupMenu.cs b/src/OWML.Common/Interfaces/Menus/IOWMLFourChoicePopupMenu.cs index cc5c2e42..37443f5f 100644 --- a/src/OWML.Common/Interfaces/Menus/IOWMLFourChoicePopupMenu.cs +++ b/src/OWML.Common/Interfaces/Menus/IOWMLFourChoicePopupMenu.cs @@ -9,5 +9,8 @@ public interface IOWMLFourChoicePopupMenu event PopupCancelEvent OnPopupCancel; void EnableMenu(bool value); + + public event Menu.ActivateMenuEvent OnActivateMenu; + public event Menu.DeactivateMenuEvent OnDeactivateMenu; } } diff --git a/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs b/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs index 821ae635..dc27beb3 100644 --- a/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs +++ b/src/OWML.Common/Interfaces/Menus/IOWMLPopupInputMenu.cs @@ -15,5 +15,7 @@ public interface IOWMLPopupInputMenu public void SetInputFieldPlaceholderText(string text); public event PopupMenu.PopupConfirmEvent OnPopupConfirm; + public event Menu.ActivateMenuEvent OnActivateMenu; + public event Menu.DeactivateMenuEvent OnDeactivateMenu; } } diff --git a/src/OWML.Common/Interfaces/Menus/IOWMLThreeChoicePopupMenu.cs b/src/OWML.Common/Interfaces/Menus/IOWMLThreeChoicePopupMenu.cs index 6a19616a..562a264a 100644 --- a/src/OWML.Common/Interfaces/Menus/IOWMLThreeChoicePopupMenu.cs +++ b/src/OWML.Common/Interfaces/Menus/IOWMLThreeChoicePopupMenu.cs @@ -12,5 +12,8 @@ public interface IOWMLThreeChoicePopupMenu event PopupCancelEvent OnPopupCancel; void EnableMenu(bool value); + + public event Menu.ActivateMenuEvent OnActivateMenu; + public event Menu.DeactivateMenuEvent OnDeactivateMenu; } } diff --git a/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs b/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs index ff87e024..23543693 100644 --- a/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs +++ b/src/SampleMods/OWML.LoadCustomAssets/LoadCustomAssets.cs @@ -55,16 +55,22 @@ public override void SetupTitleMenu(ITitleMenuManager titleManager) var infoButton = titleManager.CreateTitleButton("INFO POPUP"); var infoPopup = ModHelper.MenuHelper.PopupMenuManager.CreateInfoPopup("test info popup", "yarp"); infoButton.OnSubmitAction += () => infoPopup.EnableMenu(true); + infoPopup.OnActivateMenu += () => ModHelper.Console.WriteLine("info popup activate"); + infoPopup.OnDeactivateMenu += () => ModHelper.Console.WriteLine("info popup deactivate"); var twoChoiceButton = titleManager.CreateTitleButton("TWO CHOICE"); var twoChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateTwoChoicePopup("test two choice popup", "oak", "narp"); twoChoiceButton.OnSubmitAction += () => twoChoicePopup.EnableMenu(true); + twoChoicePopup.OnActivateMenu += () => ModHelper.Console.WriteLine("two popup activate"); + twoChoicePopup.OnDeactivateMenu += () => ModHelper.Console.WriteLine("two popup deactivate"); var threeChoiceButton = titleManager.CreateTitleButton("THREE CHOICE"); var threeChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateThreeChoicePopup("test three choice popup", "oak", "oak (better)", "narp"); threeChoiceButton.OnSubmitAction += () => threeChoicePopup.EnableMenu(true); threeChoicePopup.OnPopupConfirm1 += () => ModHelper.Console.WriteLine("Confirm 1"); threeChoicePopup.OnPopupConfirm2 += () => ModHelper.Console.WriteLine("Confirm 2"); + threeChoicePopup.OnActivateMenu += () => ModHelper.Console.WriteLine("three popup activate"); + threeChoicePopup.OnDeactivateMenu += () => ModHelper.Console.WriteLine("three popup deactivate"); var fourChoiceButton = titleManager.CreateTitleButton("FOUR CHOICE"); var fourChoicePopup = ModHelper.MenuHelper.PopupMenuManager.CreateFourChoicePopup("test four choice popup", "oak", "oak (better)", "oak (worse)", "narp"); @@ -72,6 +78,8 @@ public override void SetupTitleMenu(ITitleMenuManager titleManager) fourChoicePopup.OnPopupConfirm1 += () => ModHelper.Console.WriteLine("Confirm 1"); fourChoicePopup.OnPopupConfirm2 += () => ModHelper.Console.WriteLine("Confirm 2"); fourChoicePopup.OnPopupConfirm3 += () => ModHelper.Console.WriteLine("Confirm 3"); + fourChoicePopup.OnActivateMenu += () => ModHelper.Console.WriteLine("four popup activate"); + fourChoicePopup.OnDeactivateMenu += () => ModHelper.Console.WriteLine("four popup deactivate"); var textButton = titleManager.CreateTitleButton("INPUT POPUP TEST"); var textPopup = ModHelper.MenuHelper.PopupMenuManager.CreateInputFieldPopup("test text popup", "type a funny thing!", "ok", "cancel"); @@ -81,7 +89,8 @@ public override void SetupTitleMenu(ITitleMenuManager titleManager) ModHelper.Console.WriteLine(textPopup.GetInputText()); }; - + textPopup.OnActivateMenu += () => ModHelper.Console.WriteLine("text popup activate"); + textPopup.OnDeactivateMenu += () => ModHelper.Console.WriteLine("text popup deactivate"); } public override void CleanupTitleMenu() From 4f5c9779d5b118fbd4bce722cc007eba751c7a75 Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Fri, 22 Mar 2024 10:45:31 +0000 Subject: [PATCH 10/11] Update OWML.Manifest.json --- src/OWML.Launcher/OWML.Manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OWML.Launcher/OWML.Manifest.json b/src/OWML.Launcher/OWML.Manifest.json index e2042e01..17fb342c 100644 --- a/src/OWML.Launcher/OWML.Manifest.json +++ b/src/OWML.Launcher/OWML.Manifest.json @@ -3,7 +3,7 @@ "author": "Alek", "name": "OWML", "uniqueName": "Alek.OWML", - "version": "2.10.4", + "version": "2.11.0", "minGameVersion": "1.1.14.768", "maxGameVersion": "1.1.14.768" } From d96a04dfd666b7bcdbe3685229f705110954c73c Mon Sep 17 00:00:00 2001 From: _nebula <41904486+misternebula@users.noreply.github.com> Date: Fri, 22 Mar 2024 10:53:11 +0000 Subject: [PATCH 11/11] add SetButtonVisible --- src/OWML.Utils/MenuExtensions.cs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/OWML.Utils/MenuExtensions.cs b/src/OWML.Utils/MenuExtensions.cs index 74cb9732..0a6f7161 100644 --- a/src/OWML.Utils/MenuExtensions.cs +++ b/src/OWML.Utils/MenuExtensions.cs @@ -1,7 +1,27 @@ -namespace OWML.Utils +using UnityEngine; + +namespace OWML.Utils { public static class MenuExtensions { public static void SetMessage(this PopupMenu menu, string message) => menu._labelText.text = message; + + public static void SetButtonVisible(this SubmitAction buttonAction, bool visible) + { + var activeAlpha = 1; + + if (LoadManager.GetCurrentScene() == OWScene.TitleScreen) + { + var titleAnimationController = Resources.FindObjectsOfTypeAll()[0]._gfxController; + activeAlpha = titleAnimationController.IsTitleAnimationComplete() ? 1 : 0; + if (titleAnimationController.IsFadingInMenuOptions()) + { + activeAlpha = 1; + } + } + + buttonAction.gameObject.SetActive(visible); + buttonAction.GetComponent().alpha = visible ? activeAlpha : 0; + } } }