From a3dcd596ff1db5cc06299fe1eee8ce3ebd679fd5 Mon Sep 17 00:00:00 2001 From: wixoa Date: Wed, 20 Dec 2023 21:00:29 -0500 Subject: [PATCH] Fix `new /turf(loc)` not updating name and desc (#1559) --- OpenDreamRuntime/AtomManager.cs | 7 ------- OpenDreamRuntime/Objects/DreamObjectTree.cs | 1 + OpenDreamRuntime/Objects/Types/DreamObjectAtom.cs | 11 +++++++---- OpenDreamRuntime/Objects/Types/DreamObjectMovable.cs | 12 ++++++++---- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/OpenDreamRuntime/AtomManager.cs b/OpenDreamRuntime/AtomManager.cs index c5bb012ac7..61e3230fd2 100644 --- a/OpenDreamRuntime/AtomManager.cs +++ b/OpenDreamRuntime/AtomManager.cs @@ -192,13 +192,6 @@ public EntityUid CreateMovableEntity(DreamObjectMovable movable) { DMISpriteComponent sprite = _entityManager.AddComponent(entity); sprite.SetAppearance(GetAppearanceFromDefinition(movable.ObjectDefinition)); - if (_entityManager.TryGetComponent(entity, out MetaDataComponent? metaData)) { - _metaDataSystem ??= _entitySystemManager.GetEntitySystem(); - - _metaDataSystem.SetEntityName(entity, movable.GetDisplayName(), metaData); - _metaDataSystem.SetEntityDescription(entity, movable.Desc ?? string.Empty, metaData); - } - _entityToAtom.Add(entity, movable); return entity; } diff --git a/OpenDreamRuntime/Objects/DreamObjectTree.cs b/OpenDreamRuntime/Objects/DreamObjectTree.cs index 22f19fbccd..dcb884708f 100644 --- a/OpenDreamRuntime/Objects/DreamObjectTree.cs +++ b/OpenDreamRuntime/Objects/DreamObjectTree.cs @@ -76,6 +76,7 @@ public void LoadJson(DreamCompiledJson json) { _entitySystemManager.TryGetEntitySystem(out _appearanceSystem); _entitySystemManager.TryGetEntitySystem(out _transformSystem); _entitySystemManager.TryGetEntitySystem(out _pvsOverrideSystem); + _entitySystemManager.TryGetEntitySystem(out _metaDataSystem); Strings = json.Strings ?? new(); diff --git a/OpenDreamRuntime/Objects/Types/DreamObjectAtom.cs b/OpenDreamRuntime/Objects/Types/DreamObjectAtom.cs index 988be375f5..a5f413278f 100644 --- a/OpenDreamRuntime/Objects/Types/DreamObjectAtom.cs +++ b/OpenDreamRuntime/Objects/Types/DreamObjectAtom.cs @@ -1,4 +1,5 @@ -using OpenDreamShared.Dream; +using OpenDreamRuntime.Procs; +using OpenDreamShared.Dream; namespace OpenDreamRuntime.Objects.Types; @@ -14,9 +15,6 @@ public class DreamObjectAtom : DreamObject { public DreamList? VisLocs; // TODO: Implement public DreamObjectAtom(DreamObjectDefinition objectDefinition) : base(objectDefinition) { - ObjectDefinition.Variables["name"].TryGetValueAsString(out Name); - ObjectDefinition.Variables["desc"].TryGetValueAsString(out Desc); - Overlays = new(ObjectTree.List.ObjectDefinition, this, AppearanceSystem, false); Underlays = new(ObjectTree.List.ObjectDefinition, this, AppearanceSystem, true); VisContents = new(ObjectTree.List.ObjectDefinition, PvsOverrideSystem, this); @@ -26,6 +24,11 @@ public DreamObjectAtom(DreamObjectDefinition objectDefinition) : base(objectDefi AtomManager.AddAtom(this); } + public override void Initialize(DreamProcArguments args) { + ObjectDefinition.Variables["name"].TryGetValueAsString(out Name); + ObjectDefinition.Variables["desc"].TryGetValueAsString(out Desc); + } + protected override void HandleDeletion() { AtomManager.RemoveAtom(this); diff --git a/OpenDreamRuntime/Objects/Types/DreamObjectMovable.cs b/OpenDreamRuntime/Objects/Types/DreamObjectMovable.cs index d0cff5a599..a24a19d891 100644 --- a/OpenDreamRuntime/Objects/Types/DreamObjectMovable.cs +++ b/OpenDreamRuntime/Objects/Types/DreamObjectMovable.cs @@ -2,7 +2,6 @@ using OpenDreamRuntime.Rendering; using OpenDreamShared.Dream; using Robust.Shared.Map; -using Robust.Shared.Utility; namespace OpenDreamRuntime.Objects.Types; @@ -40,14 +39,19 @@ public DreamObjectMovable(DreamObjectDefinition objectDefinition) : base(objectD Entity = AtomManager.CreateMovableEntity(this); SpriteComponent = EntityManager.GetComponent(Entity); _transformComponent = EntityManager.GetComponent(Entity); - - objectDefinition.Variables["screen_loc"].TryGetValueAsString(out var screenLoc); - ScreenLoc = screenLoc; } public override void Initialize(DreamProcArguments args) { base.Initialize(args); + ObjectDefinition.Variables["screen_loc"].TryGetValueAsString(out var screenLoc); + ScreenLoc = screenLoc; + + if (EntityManager.TryGetComponent(Entity, out MetaDataComponent? metaData)) { + MetaDataSystem?.SetEntityName(Entity, GetDisplayName(), metaData); + MetaDataSystem?.SetEntityDescription(Entity, Desc ?? string.Empty, metaData); + } + args.GetArgument(0).TryGetValueAsDreamObject(out var loc); SetLoc(loc); //loc is set before /New() is ever called }