Delta-v/Content.Client/Stylesheets/StylesheetManager.cs

80 lines
3.1 KiB
C#

using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Client.Stylesheets.Stylesheets;
using Robust.Client.ResourceManagement;
using Robust.Client.UserInterface;
using Robust.Shared.Reflection;
namespace Content.Client.Stylesheets
{
public sealed class StylesheetManager : IStylesheetManager
{
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!;
[Dependency] private readonly IReflectionManager _reflection = default!;
[Dependency]
private readonly IResourceCache
_resCache = default!; // TODO: REMOVE (obsolete; used to construct StyleNano/StyleSpace)
public Stylesheet SheetNanotrasen { get; private set; } = default!;
public Stylesheet SheetSystem { get; private set; } = default!;
[Obsolete("Update to use SheetNanotrasen instead")]
public Stylesheet SheetNano { get; private set; } = default!;
[Obsolete("Update to use SheetSystem instead")]
public Stylesheet SheetSpace { get; private set; } = default!;
private Dictionary<string, Stylesheet> Stylesheets { get; set; } = default!;
public bool TryGetStylesheet(string name, [MaybeNullWhen(false)] out Stylesheet stylesheet)
{
return Stylesheets.TryGetValue(name, out stylesheet);
}
public HashSet<Type> UnusedSheetlets { get; private set; } = [];
public void Initialize()
{
var sawmill = _logManager.GetSawmill("style");
sawmill.Debug("Initializing Stylesheets...");
var sw = Stopwatch.StartNew();
// add all sheetlets to the hashset
var tys = _reflection.FindTypesWithAttribute<CommonSheetletAttribute>();
UnusedSheetlets = [..tys];
Stylesheets = new Dictionary<string, Stylesheet>();
SheetNanotrasen = Init(new NanotrasenStylesheet(new BaseStylesheet.NoConfig(), this));
SheetSystem = Init(new SystemStylesheet(new BaseStylesheet.NoConfig(), this));
SheetNano = new StyleNano(_resCache).Stylesheet; // TODO: REMOVE (obsolete)
SheetSpace = new StyleSpace(_resCache).Stylesheet; // TODO: REMOVE (obsolete)
_userInterfaceManager.Stylesheet = SheetNanotrasen;
// warn about unused sheetlets
if (UnusedSheetlets.Count > 0)
{
var sheetlets = UnusedSheetlets.AsEnumerable()
.Take(5)
.Select(t => t.FullName ?? "<could not get FullName>")
.ToArray();
sawmill.Error($"There are unloaded sheetlets: {string.Join(", ", sheetlets)}");
}
sawmill.Debug($"Initialized {_styleRuleCount} style rules in {sw.Elapsed}");
}
private int _styleRuleCount;
private Stylesheet Init(BaseStylesheet baseSheet)
{
Stylesheets.Add(baseSheet.StylesheetName, baseSheet.Stylesheet);
_styleRuleCount += baseSheet.Stylesheet.Rules.Count;
return baseSheet.Stylesheet;
}
}
}