From 6e62e3f58a7fd55e554743fc8a0aae0084fdc6e8 Mon Sep 17 00:00:00 2001 From: wixoaGit Date: Thu, 23 Jan 2025 08:40:11 -0500 Subject: [PATCH] Add Desc to ImmutableAppearance And fix an error in OnIconSizeChanged --- OpenDreamClient/Rendering/DMISpriteSystem.cs | 4 +++- OpenDreamShared/Dream/ImmutableAppearance.cs | 19 ++++++++++++++++--- OpenDreamShared/Dream/MutableAppearance.cs | 1 + .../Network/Messages/MsgAllAppearances.cs | 6 ++---- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/OpenDreamClient/Rendering/DMISpriteSystem.cs b/OpenDreamClient/Rendering/DMISpriteSystem.cs index 46f9e10069..562f27a7be 100644 --- a/OpenDreamClient/Rendering/DMISpriteSystem.cs +++ b/OpenDreamClient/Rendering/DMISpriteSystem.cs @@ -39,7 +39,9 @@ public override void Shutdown() { } private void OnIconSizeChanged(EntityUid uid) { - _entityManager.TryGetComponent(uid, out var transform); + if (!_entityManager.TryGetComponent(uid, out var transform)) + return; + _lookupSystem.FindAndAddToEntityTree(uid, xform: transform); } diff --git a/OpenDreamShared/Dream/ImmutableAppearance.cs b/OpenDreamShared/Dream/ImmutableAppearance.cs index 8dc97ecc2a..5688237d6d 100644 --- a/OpenDreamShared/Dream/ImmutableAppearance.cs +++ b/OpenDreamShared/Dream/ImmutableAppearance.cs @@ -29,7 +29,9 @@ public sealed class ImmutableAppearance : IEquatable { 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; [ViewVariables] public readonly int? Icon = MutableAppearance.Default.Icon; [ViewVariables] public readonly string? IconState = MutableAppearance.Default.IconState; [ViewVariables] public readonly AtomDirection Direction = MutableAppearance.Default.Direction; @@ -76,6 +78,7 @@ public ImmutableAppearance(MutableAppearance appearance, SharedAppearanceSystem? _appearanceSystem = serverAppearanceSystem; Name = appearance.Name; + Desc = appearance.Desc; Icon = appearance.Icon; IconState = appearance.IconState; Direction = appearance.Direction; @@ -142,6 +145,7 @@ public bool Equals(ImmutableAppearance? immutableAppearance) { if (immutableAppearance == null) return false; if (immutableAppearance.Name != Name) return false; + if (immutableAppearance.Desc != Desc) return false; if (immutableAppearance.Icon != Icon) return false; if (immutableAppearance.IconState != IconState) return false; if (immutableAppearance.Direction != Direction) return false; @@ -150,9 +154,9 @@ public bool Equals(ImmutableAppearance? immutableAppearance) { if (immutableAppearance.PixelOffset2 != PixelOffset2) return false; if (immutableAppearance.Color != Color) return false; if (immutableAppearance.Alpha != Alpha) return false; - if (immutableAppearance.GlideSize != GlideSize) return false; + if (!immutableAppearance.GlideSize.Equals(GlideSize)) return false; if (!immutableAppearance.ColorMatrix.Equals(ColorMatrix)) return false; - if (immutableAppearance.Layer != Layer) return false; + if (!immutableAppearance.Layer.Equals(Layer)) return false; if (immutableAppearance.Plane != Plane) return false; if (immutableAppearance.RenderSource != RenderSource) return false; if (immutableAppearance.RenderTarget != RenderTarget) return false; @@ -171,7 +175,6 @@ public bool Equals(ImmutableAppearance? immutableAppearance) { if (immutableAppearance.MaptextSize != MaptextSize) return false; if (immutableAppearance.MaptextOffset != MaptextOffset) return false; - for (int i = 0; i < Filters.Length; i++) { if (immutableAppearance.Filters[i] != Filters[i]) return false; } @@ -218,6 +221,7 @@ public override int GetHashCode() { HashCode hashCode = new HashCode(); hashCode.Add(Name); + hashCode.Add(Desc); hashCode.Add(Icon); hashCode.Add(IconState); hashCode.Add(Direction); @@ -283,6 +287,9 @@ public ImmutableAppearance(NetIncomingMessage buffer, IRobustSerializer serializ case IconAppearanceProperty.Name: Name = buffer.ReadString(); break; + case IconAppearanceProperty.Desc: + Desc = buffer.ReadString(); + break; case IconAppearanceProperty.Id: _registeredId = buffer.ReadVariableUInt32(); break; @@ -448,6 +455,7 @@ public MutableAppearance ToMutable() { MutableAppearance result = MutableAppearance.Get(); result.Name = Name; + result.Desc = Desc; result.Icon = Icon; result.IconState = IconState; result.Direction = Direction; @@ -496,6 +504,11 @@ public void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serialize buffer.Write(Name); } + if (Desc != MutableAppearance.Default.Desc) { + buffer.Write((byte)IconAppearanceProperty.Desc); + buffer.Write(Desc); + } + if (Icon != null) { buffer.Write((byte)IconAppearanceProperty.Icon); buffer.WriteVariableInt32(Icon.Value); diff --git a/OpenDreamShared/Dream/MutableAppearance.cs b/OpenDreamShared/Dream/MutableAppearance.cs index 3101537ef4..76c853cb03 100644 --- a/OpenDreamShared/Dream/MutableAppearance.cs +++ b/OpenDreamShared/Dream/MutableAppearance.cs @@ -380,6 +380,7 @@ public enum AnimationFlags { //used for encoding for netmessages public enum IconAppearanceProperty : byte { Name, + Desc, Icon, IconState, Direction, diff --git a/OpenDreamShared/Network/Messages/MsgAllAppearances.cs b/OpenDreamShared/Network/Messages/MsgAllAppearances.cs index 6f7a2bc0f4..2d4b1afd91 100644 --- a/OpenDreamShared/Network/Messages/MsgAllAppearances.cs +++ b/OpenDreamShared/Network/Messages/MsgAllAppearances.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; +using System.Collections.Generic; using Lidgren.Network; using OpenDreamShared.Dream; using Robust.Shared.Network; @@ -12,6 +9,7 @@ namespace OpenDreamShared.Network.Messages; public sealed class MsgAllAppearances(Dictionary allAppearances) : NetMessage { public override MsgGroups MsgGroup => MsgGroups.EntityEvent; public Dictionary AllAppearances = allAppearances; + public MsgAllAppearances() : this(new()) { } public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) {