From f92f36442c27d73c4c6cec1b4923e9b179c3cf93 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Fri, 25 Apr 2025 20:57:35 +0300 Subject: [PATCH] feat: state enable converted added --- .../Converters/StateEnableConverter.cs | 53 +++++++++++++++++++ .../Converters/UniverseObjectConverter.cs | 6 +-- 2 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 Engine.Serialization/Converters/StateEnableConverter.cs diff --git a/Engine.Serialization/Converters/StateEnableConverter.cs b/Engine.Serialization/Converters/StateEnableConverter.cs new file mode 100644 index 0000000..d663a36 --- /dev/null +++ b/Engine.Serialization/Converters/StateEnableConverter.cs @@ -0,0 +1,53 @@ +using Syntriax.Engine.Core; + +using YamlDotNet.Core; +using YamlDotNet.Core.Events; +using YamlDotNet.Serialization; + +namespace Syntriax.Engine.Serialization; + +public class StateEnableConverter : IEngineTypeYamlConverter +{ + private const string SERIALIZED_SCALAR_NAME = "Properties"; + + public bool Accepts(Type type) => typeof(IStateEnable).IsAssignableFrom(type); + + public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) + { + bool enabled; + + IStateEnable stateEnable; + + parser.Consume(); + + if (parser.Consume().Value.CompareTo(nameof(IStateEnable.Enabled)) != 0) + throw new(); + enabled = bool.Parse(parser.Consume().Value); + + if (parser.Consume().Value.CompareTo(SERIALIZED_SCALAR_NAME) != 0) + throw new(); + SerializedClass instanceSerializedClass = (SerializedClass)rootDeserializer(typeof(SerializedClass))!; + stateEnable = (IStateEnable)instanceSerializedClass.CreateInstance(); + + parser.Consume(); + + stateEnable.Enabled = enabled; + + return stateEnable; + } + + public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) + { + IStateEnable stateEnable = (IStateEnable)value!; + + emitter.Emit(new MappingStart()); + + emitter.Emit(new Scalar(nameof(IStateEnable.Enabled))); + emitter.Emit(new Scalar(stateEnable.Enabled.ToString())); + + emitter.Emit(new Scalar(SERIALIZED_SCALAR_NAME)); + serializer(new SerializedClass(stateEnable)); + + emitter.Emit(new MappingEnd()); + } +} diff --git a/Engine.Serialization/Converters/UniverseObjectConverter.cs b/Engine.Serialization/Converters/UniverseObjectConverter.cs index b2b5d67..69b2d5f 100644 --- a/Engine.Serialization/Converters/UniverseObjectConverter.cs +++ b/Engine.Serialization/Converters/UniverseObjectConverter.cs @@ -1,4 +1,5 @@ using Syntriax.Engine.Core; + using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; @@ -38,8 +39,7 @@ public class UniverseObjectConverter : IEngineTypeYamlConverter if (parser.Consume().Value.CompareTo(nameof(IUniverseObject.StateEnable)) != 0) throw new(); - SerializedClass stateEnableSerializedClass = (SerializedClass)rootDeserializer(typeof(SerializedClass))!; - stateEnable = (IStateEnable)stateEnableSerializedClass.CreateInstance(); + stateEnable = (IStateEnable)rootDeserializer(typeof(IStateEnable))!; if (parser.Consume().Value.CompareTo(nameof(IUniverseObject.BehaviourController)) != 0) throw new(); @@ -83,7 +83,7 @@ public class UniverseObjectConverter : IEngineTypeYamlConverter serializer(new SerializedClass(universeObject)); emitter.Emit(new Scalar(nameof(IUniverseObject.StateEnable))); - serializer(new SerializedClass(universeObject.StateEnable)); + serializer(universeObject.StateEnable); emitter.Emit(new Scalar(nameof(IUniverseObject.BehaviourController))); serializer(new SerializedClass(universeObject.BehaviourController));