From d6968f4ea9e46da909652a2df2a66a16d7f718c8 Mon Sep 17 00:00:00 2001 From: Maplewheels Date: Mon, 5 Jan 2026 08:05:40 -0500 Subject: [PATCH] [Save/Sync] Work on ModConfig loading. --- .../Data/DataInterfaceImplementations.cs | 5 +- .../LuaCs/Data/IBaseInfoDefinitions.cs | 12 ++++ .../SharedSource/LuaCs/Data/IModConfigInfo.cs | 8 ++- .../LuaCs/Data/IResourceInfoDeclarations.cs | 2 +- .../Services/Processing/ModConfigService.cs | 66 +++++++++++++++---- 5 files changed, 78 insertions(+), 15 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs index 21b718d03..26fb2464a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs @@ -14,10 +14,9 @@ namespace Barotrauma.LuaCs.Data; #region ModConfigurationInfo -public partial record ModConfigInfo : IModConfigInfo +public record ModConfigInfo : IModConfigInfo { public ContentPackage Package { get; init; } - public string PackageName { get; init; } public ImmutableArray Assemblies { get; init; } public ImmutableArray LuaScripts { get; init; } public ImmutableArray Configs { get; init; } @@ -42,6 +41,8 @@ public record BaseResourceInfo : IBaseResourceInfo public bool Optional { get; init; } public string InternalName { get; init; } public ContentPackage OwnerPackage { get; init; } + public ImmutableArray RequiredPackages { get; init; } + public ImmutableArray IncompatiblePackages { get; init; } } public record AssemblyResourceInfo : BaseResourceInfo, IAssemblyResourceInfo diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IBaseInfoDefinitions.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IBaseInfoDefinitions.cs index bf3525c0d..66dcdb626 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IBaseInfoDefinitions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IBaseInfoDefinitions.cs @@ -6,6 +6,18 @@ using System.Globalization; namespace Barotrauma.LuaCs.Data; +public interface IDependencyInfo +{ + /// + /// List of dependency packages required by this resource. + /// + ImmutableArray RequiredPackages { get; } + /// + /// List of packages incompatible with this resource. + /// + ImmutableArray IncompatiblePackages { get; } +} + public interface IPlatformInfo { /// diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IModConfigInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IModConfigInfo.cs index cdecd9037..77acdc7df 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IModConfigInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IModConfigInfo.cs @@ -1,4 +1,5 @@ using System.Collections.Immutable; +using System.Xml.Linq; namespace Barotrauma.LuaCs.Data; @@ -8,5 +9,10 @@ public partial interface IModConfigInfo : IAssembliesResourcesInfo, { // package info ContentPackage Package { get; } - string PackageName { get; } } + +public record ResourceParserInfo( + ContentPackage Owner, + XElement Element, + ImmutableArray Required, + ImmutableArray Incompatible); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs index 1bc74e54a..4dd4910f7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs @@ -5,7 +5,7 @@ using System.Globalization; namespace Barotrauma.LuaCs.Data; -public interface IBaseResourceInfo : IResourceInfo, IDataInfo {} +public interface IBaseResourceInfo : IResourceInfo, IDataInfo, IDependencyInfo {} public interface IConfigResourceInfo : IBaseResourceInfo {} diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/Processing/ModConfigService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/Processing/ModConfigService.cs index 0c3bce1f1..2274692ac 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/Processing/ModConfigService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/Processing/ModConfigService.cs @@ -17,16 +17,16 @@ namespace Barotrauma.LuaCs.Services.Processing; public sealed class ModConfigService : IModConfigService { private IStorageService _storageService; - private IParserServiceAsync _assemblyParserService; - private IParserServiceAsync _luaScriptParserService; - private IParserServiceAsync _configParserService; - private IParserServiceAsync _configProfileParserService; + private IParserServiceAsync _assemblyParserService; + private IParserServiceAsync _luaScriptParserService; + private IParserServiceAsync _configParserService; + private IParserServiceAsync _configProfileParserService; public ModConfigService(IStorageService storageService, - IParserServiceAsync assemblyParserService, - IParserServiceAsync luaScriptParserService, - IParserServiceAsync configParserService, - IParserServiceAsync configProfileParserService) + IParserServiceAsync assemblyParserService, + IParserServiceAsync luaScriptParserService, + IParserServiceAsync configParserService, + IParserServiceAsync configProfileParserService) { _storageService = storageService; _assemblyParserService = assemblyParserService; @@ -57,7 +57,7 @@ public sealed class ModConfigService : IModConfigService if (await TryGetModConfigXmlAsync(src) is { IsSuccess: true, Value: { } config }) { - return await CreateFromConfigXmlAsync(config); + return await CreateFromConfigXmlAsync(src, config); } return await CreateFromLegacyAsync(src); @@ -84,11 +84,55 @@ public sealed class ModConfigService : IModConfigService : FluentResults.Result.Fail("ModConfig.xml not found"); } - private async Task> CreateFromConfigXmlAsync(XElement src) + private async Task> CreateFromConfigXmlAsync(ContentPackage owner, XElement src) { - throw new NotImplementedException(); + /*var cfg = src.GetChildElements("Config"); + var modConfig = new ModConfigInfo() + { + Package = owner, + Assemblies = src.GetChildElements("Assembly") is {} asm ? GetAssembliesFromXml(owner, asm) + : ImmutableArray.Empty, + Configs = cfg is {} ? GetConfigsFromXml(owner, cfg) : ImmutableArray.Empty, + ConfigProfiles = cfg is {} ? GetConfigProfilesFromXml(owner, cfg) : ImmutableArray.Empty, + LuaScripts = src.GetChildElements("Lua") is {} lua ? GetLuaScriptsFromXml(owner, lua) + : ImmutableArray.Empty + };*/ + + async Task>> GetLuaScriptsFromXml(ContentPackage contentPackage, + XElement cfgElement) + { + var luaElems = cfgElement.GetChildElements("Lua").ToImmutableArray(); + if (cfgElement.GetChildElements("FileGroup").ToImmutableArray() is { IsDefaultOrEmpty: false } fileGroup + && fileGroup.SelectMany(fg => fg.GetChildElements())) + { + + } + + + throw new NotImplementedException(); + } + + async Task>> GetConfigProfilesFromXml(ContentPackage contentPackage, + XElement cfgElement) + { + throw new NotImplementedException(); + } + + async Task>> GetConfigsFromXml(ContentPackage contentPackage, + XElement cfgElement) + { + throw new NotImplementedException(); + } + + async Task>> GetAssembliesFromXml(ContentPackage contentPackage, + XElement cfgElement) + { + throw new NotImplementedException(); + } } + + private async Task> CreateFromLegacyAsync(ContentPackage src) { throw new NotImplementedException();