diff --git a/Engine.Core/Serialization/Serializers/UniverseSerializer.cs b/Engine.Core/Serialization/Serializers/UniverseSerializer.cs index d76258b..9789ba0 100644 --- a/Engine.Core/Serialization/Serializers/UniverseSerializer.cs +++ b/Engine.Core/Serialization/Serializers/UniverseSerializer.cs @@ -58,6 +58,17 @@ public class UniverseSerializer : IEngineTypeYamlSerializer { IUniverse universe = (IUniverse)value!; + IEnumerable rootUniverseObjects = universe.UniverseObjects + .Select(uo => + { + IUniverseObject root = uo; + while (root.Parent is IUniverseObject parent) + root = parent; + return root; + }) + .Where(uo => !uo.GetType().HasAttribute()) + .Distinct(); + emitter.Emit(new MappingStart()); emitter.Emit(new Scalar(nameof(IUniverse.Id))); @@ -70,7 +81,7 @@ public class UniverseSerializer : IEngineTypeYamlSerializer serializer(universe.StateEnable); emitter.Emit(new Scalar(nameof(IUniverse.UniverseObjects))); - serializer(universe.UniverseObjects.Where(uo => !uo.GetType().HasAttribute())); + serializer(rootUniverseObjects); emitter.Emit(new MappingEnd()); }