- Finished most of LuaCsSetup top-level functionality.

- Removed some unneeded interface definitions.
- Clean-slated some Services that need to be re-written.
This commit is contained in:
MapleWheels
2025-02-14 12:34:59 -05:00
committed by Maplewheels
parent d2b9ca4c1b
commit 7436ea3e8c
39 changed files with 1009 additions and 2045 deletions
@@ -0,0 +1,13 @@
using System.Collections.Immutable;
using System.Threading.Tasks;
using Barotrauma.LuaCs.Data;
namespace Barotrauma.LuaCs.Services;
public interface IStylesManagementService : IReusableService
{
Task<FluentResults.Result> LoadStylesAsync(ImmutableArray<IStylesResourceInfo> styles);
FluentResults.Result<IStylesService> GetStylesService(ContentPackage package);
Task<FluentResults.Result> DisposeAllStyles();
Task<FluentResults.Result> DisposeStylesForPackage(ContentPackage package);
}
@@ -1,4 +1,6 @@
namespace Barotrauma.LuaCs.Services;
using System.Threading.Tasks;
namespace Barotrauma.LuaCs.Services;
// TODO: Rework interface to support resource infos.
/// <summary>
@@ -7,43 +9,48 @@
public interface IStylesService : IReusableService
{
/// <summary>
/// Tries to load the styles file for the given contentpackage and path into a new UIStylesProcessor instance.
/// Tries to load the styles file for the given <see cref="ContentPackage"/> and path into a new <see cref="UIStyleProcessor"/> instance.
/// </summary>
/// <param name="package"></param>
/// <param name="path"></param>
/// <returns></returns>
FluentResults.Result LoadStylesFile(ContentPackage package, ContentPath path);
Task<FluentResults.Result> LoadStylesFileAsync(ContentPackage package, ContentPath path);
/// <summary>
/// Unloads all styles assets and UIStyleProcessor instances.
/// Unloads all styles assets and <see cref="UIStyleProcessor"/> instances.
/// </summary>
FluentResults.Result UnloadAllStyles();
/// <summary>
/// Tries to the get the font asset by xml asset name, returns null on failure.
/// Tries to the get the <see cref="GUIFont"/> asset by xml asset name, returns null on failure.
/// </summary>
/// <param name="fontName">XML Name of the asset.</param>
/// <returns>The asset or null if none are found.</returns>
GUIFont GetFont(string fontName);
/// <summary>
/// Tries to the get the sprite asset by xml asset name, returns null on failure.
/// Tries to the get the <see cref="GUISprite"/> asset by xml asset name, returns null on failure.
/// </summary>
/// <param name="spriteName">XML Name of the asset.</param>
/// <returns>The asset or null if none are found.</returns>
GUISprite GetSprite(string spriteName);
/// <summary>
/// Tries to the get the sprite sheet asset by xml asset name, returns null on failure.
/// Tries to the get the <see cref="GUISpriteSheet"/> asset by xml asset name, returns null on failure.
/// </summary>
/// <param name="spriteSheetName">XML Name of the asset.</param>
/// <returns>The asset or null if none are found.</returns>
GUISpriteSheet GetSpriteSheet(string spriteSheetName);
/// <summary>
/// Tries to the get the cursor asset by xml asset name, returns null on failure.
/// Tries to the get the <see cref="GUICursor"/> asset by xml asset name, returns null on failure.
/// </summary>
/// <param name="cursorName">XML Name of the asset.</param>
/// <returns>The asset or null if none are found.</returns>
GUICursor GetCursor(string cursorName);
/// <summary>
/// Tries to the get the color asset by xml asset name, returns null on failure.
/// Tries to the get the <see cref="GUIColor"/> asset by xml asset name, returns null on failure.
/// </summary>
/// <param name="colorName">XML Name of the asset.</param>
/// <returns>The asset or null if none are found.</returns>
@@ -1,42 +0,0 @@
using System;
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using Barotrauma.LuaCs.Data;
using Barotrauma.LuaCs.Services.Processing;
namespace Barotrauma.LuaCs.Services;
public partial class PackageService : IStylesResourcesInfo
{
private readonly Lazy<IStylesService> _stylesService;
public IStylesService Styles => _stylesService.Value;
public PackageService(
Lazy<IModConfigCreatorService> configParserService,
Lazy<ILuaScriptService> luaScriptService,
Lazy<ILocalizationService> localizationService,
Lazy<IPluginService> pluginService,
Lazy<IStylesService> stylesService,
Lazy<IConfigService> configService,
IPackageManagementService packageManagementService,
IStorageService storageService,
ILoggerService loggerService)
{
_configParserService = configParserService;
_luaScriptService = luaScriptService;
_localizationService = localizationService;
_pluginService = pluginService;
_stylesService = stylesService;
_configService = configService;
_packageManagementService = packageManagementService;
_storageService = storageService;
_loggerService = loggerService;
}
public ImmutableArray<IStylesResourceInfo> StylesResourceInfos => ModConfigInfo?.StylesResourceInfos ?? ImmutableArray<IStylesResourceInfo>.Empty;
public FluentResults.Result LoadStyles([NotNull]IStylesResourcesInfo stylesInfo)
{
throw new NotImplementedException();
}
}
@@ -0,0 +1,6 @@
namespace Barotrauma.LuaCs.Services.Processing;
public class StylesManagementService : IStylesManagementService
{
}
@@ -1,16 +1,19 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using FluentResults;
using FluentResults.LuaCs;
namespace Barotrauma.LuaCs.Services;
// TODO: Complete rewrite
public class StylesService : IStylesService
{
private readonly Dictionary<string, UIStyleProcessor> _loadedProcessors = new();
private readonly ConcurrentDictionary<string, UIStyleProcessor> _loadedProcessors = new();
private readonly IStorageService _storageService;
private readonly ILoggerService _loggerService;
@@ -19,40 +22,11 @@ public class StylesService : IStylesService
_storageService = storageService;
_loggerService = loggerService;
}
public FluentResults.Result LoadStylesFile(ContentPackage package, ContentPath path)
public async Task<FluentResults.Result> LoadStylesFileAsync(ContentPackage package, ContentPath path)
{
//check if file already in dict
if (_loadedProcessors.ContainsKey(path.FullPath))
{
return FluentResults.Result.Ok();
}
//check if file exists
if (_storageService.FileExists(path.FullPath) is {} result
&& result.IsFailed | (result.IsSuccess & result.Value == false))
{
return FluentResults.Result.Fail(result.Errors)
.WithError(new Error($"{nameof(StylesService)}.{nameof(LoadStylesFile)} file does not exist!")
.WithMetadata(MetadataType.ExceptionObject, this)
.WithMetadata(MetadataType.RootObject, package));
}
try
{
var styleProcessor = new UIStyleProcessor(package, path);
styleProcessor.LoadFile();
_loadedProcessors.Add(path.FullPath, styleProcessor);
}
catch (InvalidDataException exception)
{
return FluentResults.Result.Fail(new Error($"{nameof(StylesService)}.{nameof(LoadStylesFile)} failed for ContentPackage {package.Name}: Exception: {exception.Message}")
.WithMetadata(MetadataType.ExceptionDetails, exception.Message)
.WithMetadata(MetadataType.ExceptionObject, this)
.WithMetadata(MetadataType.RootObject, package)
.WithMetadata(MetadataType.StackTrace, exception.StackTrace));
}
return FluentResults.Result.Ok();
throw new NotImplementedException();
}
public FluentResults.Result UnloadAllStyles()
@@ -134,7 +108,7 @@ public class StylesService : IStylesService
return null;
}
private bool NoProcessorsLoaded => _loadedProcessors.Count < 1;
private bool NoProcessorsLoaded => _loadedProcessors.IsEmpty;
public void Dispose()
{
@@ -146,4 +120,6 @@ public class StylesService : IStylesService
{
return UnloadAllStyles();
}
public bool IsDisposed { get; private set; }
}