From b402e09b825542ba9dac36cfd08f102d3ef5ee9d Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Sun, 15 Mar 2026 17:52:40 -0300 Subject: [PATCH] Move MainMenu code to a separate service that just injects our stuff into the mainmenu --- .../Screens/MainMenuScreen/MainMenuScreen.cs | 19 ------ .../SharedSource/LuaCs/LuaCsSetup.cs | 4 +- .../LuaCs/_Services/MainMenuPatch.cs | 67 +++++++++++++++++++ 3 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/MainMenuPatch.cs diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen/MainMenuScreen.cs index 45a7c141f..e287d991b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen/MainMenuScreen.cs @@ -531,25 +531,6 @@ namespace Barotrauma } }; #endif - /*new GUIButton(new RectTransform(new Point(300, 30), Frame.RectTransform, Anchor.TopLeft) { AbsoluteOffset = new Point(40, 50) }, - $"Open LuaCs Settings", style: "MainMenuGUIButton", color: GUIStyle.Red) - { - IgnoreLayoutGroups = true, - OnClicked = (tb, userdata) => - { - LuaCsSettingsMenu.Open(Frame.RectTransform); - return true; - } - };*/ - - // TODO: Implement version reading. - //string version = File.Exists(LuaCsSetup.VersionFile) ? File.ReadAllText(LuaCsSetup.VersionFile) : "Github"; - string version = "NOT_IMPLEMENTED"; - - new GUITextBlock(new RectTransform(new Point(300, 30), Frame.RectTransform, Anchor.TopLeft) { AbsoluteOffset = new Point(10, 10) }, $"Using LuaCsForBarotrauma revision {AssemblyInfo.GitRevision} version {version}", Color.Red) - { - IgnoreLayoutGroups = false - }; var minButtonSize = new Point(120, 20); var maxButtonSize = new Point(480, 80); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index 2445f1e2a..451f8a959 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -195,7 +195,8 @@ namespace Barotrauma servicesProvider.RegisterServiceType(ServiceLifetime.Transient); servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); servicesProvider.RegisterServiceType(ServiceLifetime.Transient); - + servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); + // Extension/Sub Services servicesProvider.RegisterServiceType(ServiceLifetime.Transient); servicesProvider.RegisterServiceType(ServiceLifetime.Transient); @@ -348,6 +349,7 @@ namespace Barotrauma LuaScriptManagementService.Reset(); PackageManagementService.Reset(); NetworkingService.Reset(); + _servicesProvider.GetService().Reset(); Logger.LogMessage("Services have been reset"); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/MainMenuPatch.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/MainMenuPatch.cs new file mode 100644 index 000000000..44172628d --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/MainMenuPatch.cs @@ -0,0 +1,67 @@ +using Barotrauma; +using Barotrauma.LuaCs; +using Barotrauma.LuaCs.Events; +using FluentResults; +using HarmonyLib; +using Microsoft.Xna.Framework; + +[HarmonyPatch] +internal class MainMenuPatch : ISystem, IEventScreenSelected +{ + public bool IsDisposed { get; private set; } + + private readonly IEventService _eventService; + + public MainMenuPatch(IEventService eventService) + { + _eventService = eventService; + + RegisterEvents(); + +#if CLIENT + if (Screen.Selected is MainMenuScreen mainMenuScreen) + { + AddToMainMenu(mainMenuScreen); + } +#endif + } + + public void OnScreenSelected(Screen screen) + { +#if CLIENT + if (screen is MainMenuScreen mainMenuScreen) + { + AddToMainMenu(mainMenuScreen); + } +#endif + } + +#if CLIENT + private void AddToMainMenu(MainMenuScreen screen) + { + new GUITextBlock(new RectTransform(new Point(300, 30), screen.Frame.RectTransform, Anchor.TopLeft) { AbsoluteOffset = new Point(10, 10) }, $"Using LuaCsForBarotrauma revision {AssemblyInfo.GitRevision}", Color.Red) + { + IgnoreLayoutGroups = false + }; + } +#endif + + private void RegisterEvents() + { + _eventService.Subscribe(this); + } + + public void Dispose() + { + _eventService.Unsubscribe(this); + + IsDisposed = true; + } + + public FluentResults.Result Reset() + { + RegisterEvents(); + + return FluentResults.Result.Ok(); + } +}