From e1e3c249619228e189d512fef43f7804a5f870af Mon Sep 17 00:00:00 2001 From: wixoaGit Date: Fri, 24 Jan 2025 15:25:14 -0500 Subject: [PATCH] Fixes --- OpenDreamRuntime/Rendering/ServerAppearanceSystem.cs | 11 ++++------- OpenDreamShared/Dream/ImmutableAppearance.cs | 8 ++++---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/OpenDreamRuntime/Rendering/ServerAppearanceSystem.cs b/OpenDreamRuntime/Rendering/ServerAppearanceSystem.cs index e5b7eb9de7..c2afa5d9f1 100644 --- a/OpenDreamRuntime/Rendering/ServerAppearanceSystem.cs +++ b/OpenDreamRuntime/Rendering/ServerAppearanceSystem.cs @@ -1,17 +1,16 @@ using OpenDreamShared.Dream; using Robust.Server.Player; using Robust.Shared.Enums; -using SharedAppearanceSystem = OpenDreamShared.Rendering.SharedAppearanceSystem; using System.Diagnostics.CodeAnalysis; using OpenDreamShared.Network.Messages; using Robust.Shared.Player; -using Robust.Shared.Network; using System.Diagnostics; +using SharedAppearanceSystem = OpenDreamShared.Rendering.SharedAppearanceSystem; namespace OpenDreamRuntime.Rendering; public sealed class ServerAppearanceSystem : SharedAppearanceSystem { - public readonly ImmutableAppearance DefaultAppearance; + public ImmutableAppearance DefaultAppearance = default!; /// /// Each appearance gets a unique ID when marked as registered. Here we store these as a key -> weakref in a weaktable, which does not count @@ -28,10 +27,9 @@ public sealed class ServerAppearanceSystem : SharedAppearanceSystem { private readonly Dictionary _idToAppearance = new(); private uint _counter; - [Dependency] private readonly IServerNetManager _networkManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; - public ServerAppearanceSystem() { + public override void Initialize() { DefaultAppearance = new ImmutableAppearance(MutableAppearance.Default, this); DefaultAppearance.MarkRegistered(_counter++); //first appearance registered gets id 0, this is the blank default appearance ProxyWeakRef proxyWeakRef = new(DefaultAppearance); @@ -40,9 +38,7 @@ public ServerAppearanceSystem() { //leaving this in as a sanity check for mutable and immutable appearance hashcodes covering all the same vars //if this debug assert fails, you've probably changed appearance var and not updated its counterpart Debug.Assert(DefaultAppearance.GetHashCode() == MutableAppearance.Default.GetHashCode()); - } - public override void Initialize() { _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; } @@ -99,6 +95,7 @@ public ImmutableAppearance AddAppearance(ImmutableAppearance appearance, bool re } //this should only be called by the ImmutableAppearance's finalizer + [Access(typeof(ImmutableAppearance))] public override void RemoveAppearance(ImmutableAppearance appearance) { lock (_lock) { ProxyWeakRef proxyWeakRef = new(appearance); diff --git a/OpenDreamShared/Dream/ImmutableAppearance.cs b/OpenDreamShared/Dream/ImmutableAppearance.cs index 5688237d6d..97bffc6d38 100644 --- a/OpenDreamShared/Dream/ImmutableAppearance.cs +++ b/OpenDreamShared/Dream/ImmutableAppearance.cs @@ -23,12 +23,9 @@ namespace OpenDreamShared.Dream; */ // TODO: Wow this is huge! Probably look into splitting this by most used/least used to reduce the size of these -[Serializable] +[Serializable, NetSerializable] public sealed class ImmutableAppearance : IEquatable { private uint? _registeredId; - private bool _needsFinalizer; - private int? _storedHashCode; - private readonly SharedAppearanceSystem? _appearanceSystem; [ViewVariables] public readonly string Name = MutableAppearance.Default.Name; [ViewVariables] public readonly string? Desc = MutableAppearance.Default.Desc; @@ -71,6 +68,9 @@ public sealed class ImmutableAppearance : IEquatable { // PixelOffset2 behaves the same as PixelOffset in top-down mode, so this is used public Vector2i TotalPixelOffset => PixelOffset + PixelOffset2; + [NonSerialized] private readonly SharedAppearanceSystem? _appearanceSystem; + [NonSerialized] private bool _needsFinalizer; + [NonSerialized] private int? _storedHashCode; [NonSerialized] private List? _overlayIDs; [NonSerialized] private List? _underlayIDs;