[Save/Sync] Work on the settings menu.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using System;
|
||||
using System.Collections.Immutable;
|
||||
using Microsoft.Xna.Framework;
|
||||
using System.Linq;
|
||||
using Barotrauma.LuaCs.Data;
|
||||
@@ -8,6 +9,11 @@ namespace Barotrauma.LuaCs;
|
||||
internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenu
|
||||
{
|
||||
private readonly ImmutableArray<ISettingBase> _settingsInstancesGameplay;
|
||||
// menu vars
|
||||
private GUILayoutGroup _modCategoryDisplayGroup, _settingsDisplayGroup;
|
||||
private string _selectedSearchQuery = string.Empty;
|
||||
private ContentPackage _selectedContentPackage;
|
||||
private string _selectedCategory = string.Empty;
|
||||
|
||||
public ModsGameplaySettingsMenu(GUIFrame contentFrame,
|
||||
IPackageManagementService packageManagementService,
|
||||
@@ -47,30 +53,84 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenu
|
||||
// main display area
|
||||
var settingsContentAreaGroup = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.90f), contentAreaLayoutGroup.RectTransform, Anchor.BottomCenter));
|
||||
GUIUtil.Spacer(settingsContentAreaGroup, Vector2.One);
|
||||
var (modCategoryDisplayGroup, settingsDisplayGroup) = GUIUtil.CreateSidebars(settingsContentAreaGroup, true);
|
||||
modCategoryDisplayGroup.RectTransform.RelativeSize = new Vector2(0.3f, 1f);
|
||||
settingsDisplayGroup.RectTransform.RelativeSize = new Vector2(0.7f, 1f);
|
||||
(_modCategoryDisplayGroup, _settingsDisplayGroup) = GUIUtil.CreateSidebars(settingsContentAreaGroup, true);
|
||||
_modCategoryDisplayGroup.RectTransform.RelativeSize = new Vector2(0.3f, 1f);
|
||||
_settingsDisplayGroup.RectTransform.RelativeSize = new Vector2(0.7f, 1f);
|
||||
|
||||
// Mods & Category Selectors
|
||||
var cpList = packageManagementService.GetAllLoadedPackages().OrderBy(cp => cp.Name == "Vanilla" ? 0 : 1).ThenBy(cp => cp.Name).ToList();
|
||||
var modSelectDropDown = GUIUtil.Dropdown<ContentPackage>(modCategoryDisplayGroup, cp => cp.Name == "Vanilla" ? "All" : cp.Name, null, cpList, cpList[0], cp =>
|
||||
{
|
||||
// TODO: apply filter text
|
||||
}, Vector2.One, 2);
|
||||
GenerateCategoryListDisplay(_modCategoryDisplayGroup, GetDisplayCategoriesList());
|
||||
GenerateSettingsListDisplay(_settingsDisplayGroup, GetDisplaySettingsList());
|
||||
|
||||
void GenerateDisplayFromFilter(string text)
|
||||
{
|
||||
|
||||
_selectedSearchQuery = text;
|
||||
GenerateCategoryListDisplay(_modCategoryDisplayGroup, GetDisplayCategoriesList());
|
||||
GenerateSettingsListDisplay(_settingsDisplayGroup, GetDisplaySettingsList());
|
||||
}
|
||||
|
||||
void GenerateCategoryListDisplay(GUILayoutGroup layoutGroup, ImmutableArray<ISettingBase> settings)
|
||||
ImmutableArray<string> GetDisplayCategoriesList()
|
||||
{
|
||||
return _settingsInstancesGameplay
|
||||
.Select(s => s.GetDisplayInfo().DisplayCategory)
|
||||
.Distinct()
|
||||
.ToImmutableArray();
|
||||
}
|
||||
|
||||
ImmutableArray<ISettingBase> GetDisplaySettingsList()
|
||||
{
|
||||
return _settingsInstancesGameplay
|
||||
.Where(s => _selectedCategory.IsNullOrWhiteSpace()
|
||||
|| s.GetDisplayInfo().DisplayCategory == _selectedCategory)
|
||||
.Where(s => _selectedContentPackage is null
|
||||
|| s.OwnerPackage == _selectedContentPackage)
|
||||
.ToImmutableArray();
|
||||
}
|
||||
|
||||
void GenerateCategoryListDisplay(GUILayoutGroup layoutGroup, ImmutableArray<string> categoryIdents)
|
||||
{
|
||||
layoutGroup.ClearChildren();
|
||||
|
||||
var packages = _settingsInstancesGameplay.Select(s => s.OwnerPackage)
|
||||
.Distinct()
|
||||
.OrderBy(cp => cp.Name)
|
||||
.ToImmutableArray();
|
||||
var packageSelectionList = GUIUtil.Dropdown<ContentPackage>(layoutGroup, cp => cp.Name, null,
|
||||
packages, packages[0], cp =>
|
||||
{
|
||||
_selectedContentPackage = cp;
|
||||
_selectedCategory = string.Empty;
|
||||
GenerateCategoryListDisplay(_modCategoryDisplayGroup, GetDisplayCategoriesList());
|
||||
GenerateSettingsListDisplay(_settingsDisplayGroup, GetDisplaySettingsList());
|
||||
}, new Vector2(1f, 0.07f));
|
||||
var containerBox = new GUIListBox(new RectTransform(new Vector2(1f, 0.93f), layoutGroup.RectTransform));
|
||||
float size_y = MathF.Max(categoryIdents.Length * 0.122f, 1f);
|
||||
var displayedCategoriesFrame = new GUIFrame(new RectTransform(new Vector2(1f, size_y), containerBox.Content.RectTransform), style: null, color: Color.Black)
|
||||
{
|
||||
CanBeFocused = false
|
||||
};
|
||||
var displayCategoriesLayout = new GUILayoutGroup(new RectTransform(Vector2.One, displayedCategoriesFrame.RectTransform));
|
||||
|
||||
foreach (var category in categoryIdents)
|
||||
{
|
||||
DebugConsole.Log(category);
|
||||
new GUIButton(new RectTransform(new Vector2(1f, 0.122f), displayCategoriesLayout.RectTransform), text: TextManager.Get(category))
|
||||
{
|
||||
CanBeFocused = true,
|
||||
CanBeSelected = true,
|
||||
OnPressed = () =>
|
||||
{
|
||||
_selectedCategory = category;
|
||||
GenerateSettingsListDisplay(_settingsDisplayGroup, GetDisplaySettingsList());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void GenerateSettingsListDisplay(GUILayoutGroup layoutGroup, ImmutableArray<ISettingBase> settings)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,8 +2,13 @@
|
||||
<infotexts language="English" nowhitespace="false" translatedname="English">
|
||||
<LuaCsForBarotrauma.SettingsMenu.ModControlsButton>Mod Controls Settings</LuaCsForBarotrauma.SettingsMenu.ModControlsButton>
|
||||
<LuaCsForBarotrauma.SettingsMenu.ModGameplayButton>Mod Gameplay Settings</LuaCsForBarotrauma.SettingsMenu.ModGameplayButton>
|
||||
<LuaCsForBarotrauma.Setting.DisableErrorGUIOverlay>Suppress GUI Popup on Error</LuaCsForBarotrauma.Setting.DisableErrorGUIOverlay>
|
||||
<LuaCsForBarotrauma.Setting.IsCsEnabled>Are C# Mods Allowed</LuaCsForBarotrauma.Setting.IsCsEnabled>
|
||||
<LuaCsForBarotrauma.Setting.HideUserNamesInLogs>Hide Local OS Account Name In Logs</LuaCsForBarotrauma.Setting.HideUserNamesInLogs>
|
||||
<LuaCsForBarotrauma.Setting.LocalDataSavePath>Where to Save Local Data</LuaCsForBarotrauma.Setting.LocalDataSavePath>
|
||||
<!-- Settings -->
|
||||
<LuaCsForBarotrauma.DisableErrorGUIOverlay.DisplayName>Suppress GUI Popup on Error</LuaCsForBarotrauma.DisableErrorGUIOverlay.DisplayName>
|
||||
<LuaCsForBarotrauma.DisableErrorGUIOverlay.DisplayCategory>General</LuaCsForBarotrauma.DisableErrorGUIOverlay.DisplayCategory>
|
||||
<LuaCsForBarotrauma.IsCsEnabled.DisplayName>Are C# Mods Allowed</LuaCsForBarotrauma.IsCsEnabled.DisplayName>
|
||||
<LuaCsForBarotrauma.IsCsEnabled.DisplayCategory>General</LuaCsForBarotrauma.IsCsEnabled.DisplayCategory>
|
||||
<LuaCsForBarotrauma.HideUserNamesInLogs.DisplayName>Hide Local OS Account Name In Logs</LuaCsForBarotrauma.HideUserNamesInLogs.DisplayName>
|
||||
<LuaCsForBarotrauma.HideUserNamesInLogs.DisplayCategory>General</LuaCsForBarotrauma.HideUserNamesInLogs.DisplayCategory>
|
||||
<LuaCsForBarotrauma.LocalDataSavePath.DisplayName>Where to Save Local Data</LuaCsForBarotrauma.LocalDataSavePath.DisplayName>
|
||||
<LuaCsForBarotrauma.LocalDataSavePath.DisplayCategory>General</LuaCsForBarotrauma.LocalDataSavePath.DisplayCategory>
|
||||
</infotexts>
|
||||
|
||||
Reference in New Issue
Block a user