From 114e76ef7d440aa3672f5287f53c05d07c2bb898 Mon Sep 17 00:00:00 2001 From: wixoa Date: Thu, 23 Jan 2025 21:25:48 -0500 Subject: [PATCH] Fix an error in `OnNewAppearance()` (#2182) --- OpenDreamClient/Interface/Html/HtmlParser.cs | 4 +++- .../Rendering/ClientAppearanceSystem.cs | 15 ++++++++++++--- OpenDreamClient/Rendering/DreamViewOverlay.cs | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/OpenDreamClient/Interface/Html/HtmlParser.cs b/OpenDreamClient/Interface/Html/HtmlParser.cs index 476fd4f928..ef434e83c2 100644 --- a/OpenDreamClient/Interface/Html/HtmlParser.cs +++ b/OpenDreamClient/Interface/Html/HtmlParser.cs @@ -8,6 +8,7 @@ public static class HtmlParser { private const string TagNotClosedError = "HTML tag was not closed"; private static readonly ISawmill Sawmill; + private static readonly HashSet WarnedAttributes = new(); static HtmlParser() { Sawmill = IoCManager.Resolve().GetSawmill("opendream.html_parser"); @@ -169,7 +170,8 @@ private static Dictionary ParseAttributes(string[] attr parameter = new(color); break; default: - Sawmill.Debug($"Unimplemented HTML attribute \"{attributeName}\""); + if (WarnedAttributes.Add(attributeName)) + Sawmill.Debug($"Unimplemented HTML attribute \"{attributeName}\""); continue; } diff --git a/OpenDreamClient/Rendering/ClientAppearanceSystem.cs b/OpenDreamClient/Rendering/ClientAppearanceSystem.cs index 684730c40f..00caf24338 100644 --- a/OpenDreamClient/Rendering/ClientAppearanceSystem.cs +++ b/OpenDreamClient/Rendering/ClientAppearanceSystem.cs @@ -15,6 +15,7 @@ internal sealed class ClientAppearanceSystem : SharedAppearanceSystem { private readonly Dictionary>> _appearanceLoadCallbacks = new(); private readonly Dictionary _turfIcons = new(); private readonly Dictionary _filterShaders = new(); + private bool _receivedAllAppearancesMsg; [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IDreamResourceManager _dreamResourceManager = default!; @@ -30,13 +31,17 @@ public override void Initialize() { } public override void Shutdown() { + _receivedAllAppearancesMsg = false; _appearances.Clear(); _appearanceLoadCallbacks.Clear(); _turfIcons.Clear(); + _filterShaders.Clear(); } public void SetAllAppearances(Dictionary appearances) { _appearances = appearances; + _receivedAllAppearancesMsg = true; + //need to do this because all overlays can't be resolved until the whole appearance table is populated foreach(KeyValuePair pair in _appearances) { pair.Value.ResolveOverlays(this); @@ -73,10 +78,14 @@ public DreamIcon GetTurfIcon(uint turfId) { public void OnNewAppearance(MsgNewAppearance e) { uint appearanceId = e.Appearance.MustGetId(); _appearances[appearanceId] = e.Appearance; - _appearances[appearanceId].ResolveOverlays(this); - if (_appearanceLoadCallbacks.TryGetValue(appearanceId, out var callbacks)) { - foreach (var callback in callbacks) callback(_appearances[appearanceId]); + // If we haven't received the MsgAllAppearances yet, leave this initialization for later + if (_receivedAllAppearancesMsg) { + _appearances[appearanceId].ResolveOverlays(this); + + if (_appearanceLoadCallbacks.TryGetValue(appearanceId, out var callbacks)) { + foreach (var callback in callbacks) callback(_appearances[appearanceId]); + } } } diff --git a/OpenDreamClient/Rendering/DreamViewOverlay.cs b/OpenDreamClient/Rendering/DreamViewOverlay.cs index 343a6e6166..526276bf1e 100644 --- a/OpenDreamClient/Rendering/DreamViewOverlay.cs +++ b/OpenDreamClient/Rendering/DreamViewOverlay.cs @@ -513,7 +513,7 @@ private DreamPlane GetPlane(int planeIndex, Vector2i viewportSize) { plane = new(renderTarget); _planes.Add(planeIndex, plane); - _sawmill.Info($"Created plane {planeIndex}"); + _sawmill.Verbose($"Created plane {planeIndex}"); return plane; }