using System; using System.Collections.Generic; using Engine.Serialization.DTOs; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; namespace Engine.Serialization; public class GameObjectDTOListConverter : IYamlTypeConverter { public bool Accepts(Type type) { return type == typeof(List); } public object ReadYaml(IParser parser, Type type) { var gameObjects = new List(); if (parser.Current is SequenceStart) { parser.MoveNext(); while (parser.Current != null && !(parser.Current is SequenceEnd)) { gameObjects.Add((GameObjectDTO)new GameObjectYamlConverter().ReadYaml(parser, typeof(GameObjectDTO))); parser.MoveNext(); } } return gameObjects; } public void WriteYaml(IEmitter emitter, object? value, Type type) { var gameObjects = (List)(value ?? throw new Exception()); emitter.Emit(new SequenceStart(null, null, false, SequenceStyle.Block)); foreach (var gameObject in gameObjects) new GameObjectYamlConverter().WriteYaml(emitter, gameObject, typeof(BehaviourDTO)); emitter.Emit(new SequenceEnd()); } }