From 368b18d44028080662714137d71b7230fc4ff0cf Mon Sep 17 00:00:00 2001 From: MapleWheels Date: Thu, 5 Mar 2026 17:48:27 -0500 Subject: [PATCH] - Fixed shet. --- .../ClientSource/LuaCs/Data/SettingControl.cs | 23 ++++++++++++++++--- .../_SettingsMenu/ModsGameplaySettingsMenu.cs | 7 +++--- .../_SettingsMenu/SettingsMenuSystem.cs | 5 ++-- .../[DebugOnlyTest]TestLuaMod/Settings.xml | 1 + .../SettingsFactoryRegistrationProvider.cs | 10 ++++++-- 5 files changed, 36 insertions(+), 10 deletions(-) diff --git a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs index fb2dea794..bceb15068 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs @@ -3,15 +3,27 @@ using System.Globalization; using System.Linq; using System.Xml.Linq; using Barotrauma.LuaCs.Data; +using Microsoft.Toolkit.Diagnostics; using Microsoft.Xna.Framework.Input; using OneOf; namespace Barotrauma.LuaCs.Data; -public class SettingControl : SettingBase, ISettingControl +public sealed class SettingControl : SettingBase, ISettingControl { - public SettingControl(IConfigInfo configInfo) : base(configInfo) + public class Factory : ISettingBase.IFactory { + public ISettingBase CreateInstance(IConfigInfo configInfo, Func, bool> valueChangePredicate) + { + Guard.IsNotNull(configInfo, nameof(configInfo)); + return new SettingControl(configInfo, valueChangePredicate); + } + } + + public SettingControl(IConfigInfo configInfo, Func, bool> valueChangePredicate) : base(configInfo) + { + _valueChangePredicate = valueChangePredicate; + TrySetValue(configInfo.Element); } protected override void OnDispose() @@ -19,9 +31,9 @@ public class SettingControl : SettingBase, ISettingControl OnValueChanged = null; } + private Func, bool> _valueChangePredicate; public override Type GetValueType() => typeof(KeyOrMouse); public override string GetStringValue() => Value.ToString(); - public override string GetDefaultStringValue() => new KeyOrMouse(Keys.NumLock).ToString(); public override bool TrySetValue(OneOf value) @@ -35,6 +47,11 @@ public class SettingControl : SettingBase, ISettingControl return false; } + if (_valueChangePredicate is not null && !_valueChangePredicate.Invoke(newVal)) + { + return false; + } + Value = newVal; OnValueChanged?.Invoke(this); return true; diff --git a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/ModsGameplaySettingsMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/ModsGameplaySettingsMenu.cs index adca18b3b..d6e543508 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/ModsGameplaySettingsMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/ModsGameplaySettingsMenu.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Numerics; using Barotrauma.LuaCs.Data; using Vector2 = Microsoft.Xna.Framework.Vector2; +using Vector4 = Microsoft.Xna.Framework.Vector4; // ReSharper disable ObjectCreationAsStatement @@ -28,7 +29,6 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenuBase SettingsMenu settingsMenuInstance) : base(contentFrame, packageManagementService, configService, settingsMenuInstance) { _settingsInstancesGameplay = configService.GetDisplayableConfigs() - .Where(s => s is not ISettingControl) .ToImmutableArray(); @@ -69,7 +69,6 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenuBase OnApplyInstalledModsChanges = () => { _settingsInstancesGameplay = configService.GetDisplayableConfigs() - .Where(s => s is not ISettingControl) .ToImmutableArray(); if (_selectedContentPackage is not null && !GetTargetPackagesList().Contains(_selectedContentPackage)) { @@ -128,6 +127,7 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenuBase .Where(s => _selectedCategory.IsNullOrWhiteSpace() || _selectedCategory == "All" || GetLocalizedString(s.GetDisplayInfo().DisplayCategory, "General") == _selectedCategory) + .OrderBy(s => GetLocalizedString(s.GetDisplayInfo().DisplayName, s.InternalName)) .ToImmutableArray(); } @@ -139,6 +139,7 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenuBase .Where(s => _selectedContentPackage is null || _selectedContentPackage == ContentPackageManager.VanillaCorePackage // vanilla is treated as all packages || s.OwnerPackage == _selectedContentPackage) + .OrderBy(s => GetLocalizedString(s.GetDisplayInfo().DisplayName, s.InternalName)) .ToImmutableArray(); } @@ -212,7 +213,6 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenuBase foreach (var category in categories) { - DebugConsole.Log(category); var btn = new GUIButton(new RectTransform(new Vector2(1f, 0.122f), displayCategoriesLayout.RectTransform), text: category, color: Color.TransparentBlack) { @@ -264,6 +264,7 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenuBase font: GUIStyle.SmallFont, textAlignment: Alignment.Left) { + Padding = new Vector4(0.02f,0,0,0), CanBeFocused = false }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/SettingsMenuSystem.cs b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/SettingsMenuSystem.cs index 4f5575f36..9347809c7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/SettingsMenuSystem.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Services/_SettingsMenu/SettingsMenuSystem.cs @@ -45,11 +45,12 @@ public class SettingsMenuSystem : ISettingsMenuSystem _gameplayContentFrame = CreateNewContentTab(tabGameplayIndex, __instance, "SettingsMenuTab.Mods", "LuaCsForBarotrauma.SettingsMenu.ModGameplayButton"); - _controlsContentFrame = CreateNewContentTab(tabControlsIndex, __instance, + /*_controlsContentFrame = CreateNewContentTab(tabControlsIndex, __instance, "SettingsMenuTab.Controls", "LuaCsForBarotrauma.SettingsMenu.ModControlsButton"); + */ _gameplayMenuInstance = new ModsGameplaySettingsMenu(_gameplayContentFrame, _packageManagementService, _configService, __instance); - _controlsMenuInstance = new ModsControlsSettingsMenu(_controlsContentFrame, _packageManagementService, _configService, __instance); + //_controlsMenuInstance = new ModsControlsSettingsMenu(_controlsContentFrame, _packageManagementService, _configService, __instance); } private GUIFrame CreateNewContentTab(SettingsMenu.Tab tab, SettingsMenu settingsMenuInstance, string settingsMenuTabName, string settingMenuHoverTextIdent) diff --git a/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Settings.xml b/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Settings.xml index a3651960b..17f0857cb 100644 --- a/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Settings.xml +++ b/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Settings.xml @@ -7,6 +7,7 @@ + diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingsFactoryRegistrationProvider.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingsFactoryRegistrationProvider.cs index 1cf612366..31d85e8b0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingsFactoryRegistrationProvider.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingsFactoryRegistrationProvider.cs @@ -50,8 +50,14 @@ public class SettingsEntryRegistrar : ISettingsRegistrationProvider return new SettingRangeFloat.RangeFactory().CreateInstance(cfgInfo.Info, (val) => IsValueChangeAllowed(cfgInfo.Info, val, valueChangePredicate)); }); - - // ISettingList : Not Implemented yet + +#if CLIENT + configService.RegisterSettingTypeInitializer("control" , cfgInfo => + { + return new SettingControl.Factory().CreateInstance(cfgInfo.Info, val => + IsValueChangeAllowed(cfgInfo.Info, val, valueChangePredicate)); + }); +#endif } private void RegisterSettingEntry(IConfigService configService, string typeName, Func, bool> valueChangePredicate) where T : IEquatable, IConvertible