refactor!: Identifiable interface extracted from IEntity
This commit is contained in:
		@@ -8,6 +8,6 @@ namespace Engine.Serializers.Yaml;
 | 
			
		||||
public interface IEngineTypeYamlConverter : IYamlTypeConverter
 | 
			
		||||
{
 | 
			
		||||
    YamlSerializer Serializer { get; set; }
 | 
			
		||||
    EntityRegistry EntityRegistry { get; set; }
 | 
			
		||||
    IdentifiableRegistry IdentifiableRegistry { get; set; }
 | 
			
		||||
    IProgressionTracker ProgressionTracker { get; set; }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ public class BehaviourControllerConverter : EngineTypeYamlSerializerBase<IBehavi
 | 
			
		||||
            throw new();
 | 
			
		||||
        SerializedClass instanceSerializedClass = (SerializedClass)rootDeserializer(typeof(SerializedClass))!;
 | 
			
		||||
        ProgressionTracker.Set(isTrackingController ? .5f : ProgressionTracker.Progression, $"Creating {instanceSerializedClass.Type}");
 | 
			
		||||
        behaviourController = (IBehaviourController)instanceSerializedClass.CreateInstance(EntityRegistry);
 | 
			
		||||
        behaviourController = (IBehaviourController)instanceSerializedClass.CreateInstance(IdentifiableRegistry);
 | 
			
		||||
 | 
			
		||||
        string value = parser.Consume<Scalar>().Value;
 | 
			
		||||
        if (value.CompareTo(nameof(IBehaviourController.StateEnable)) != 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ public class BehaviourConverter : EngineTypeYamlSerializerBase<IBehaviour>
 | 
			
		||||
            throw new();
 | 
			
		||||
        SerializedClass instanceSerializedClass = (SerializedClass)rootDeserializer(typeof(SerializedClass))!;
 | 
			
		||||
        ProgressionTracker.Set(isTrackingController ? .5f : ProgressionTracker.Progression, $"Creating {instanceSerializedClass.Type}");
 | 
			
		||||
        behaviour = (IBehaviour)instanceSerializedClass.CreateInstance(EntityRegistry);
 | 
			
		||||
        behaviour = (IBehaviour)instanceSerializedClass.CreateInstance(IdentifiableRegistry);
 | 
			
		||||
 | 
			
		||||
        if (parser.Consume<Scalar>().Value.CompareTo(nameof(IBehaviour.StateEnable)) != 0)
 | 
			
		||||
            throw new();
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ public abstract class EngineTypeYamlSerializerBase<T> : IEngineTypeYamlConverter
 | 
			
		||||
{
 | 
			
		||||
    protected const string SERIALIZED_SCALAR_NAME = "Properties";
 | 
			
		||||
 | 
			
		||||
    public EntityRegistry EntityRegistry { get; set; } = null!;
 | 
			
		||||
    public IdentifiableRegistry IdentifiableRegistry { get; set; } = null!;
 | 
			
		||||
    public YamlSerializer Serializer { get; set; } = null!;
 | 
			
		||||
    public IProgressionTracker ProgressionTracker { get; set; } = null!;
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +24,7 @@ public abstract class EngineTypeYamlSerializerBase<T> : IEngineTypeYamlConverter
 | 
			
		||||
        T? result = Read(parser, type, rootDeserializer);
 | 
			
		||||
 | 
			
		||||
        if (result is IEntity entity)
 | 
			
		||||
            EntityRegistry.Add(entity);
 | 
			
		||||
            IdentifiableRegistry.Add(entity);
 | 
			
		||||
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ public class StateEnableConverter : EngineTypeYamlSerializerBase<IStateEnable>
 | 
			
		||||
        if (parser.Consume<Scalar>().Value.CompareTo(SERIALIZED_SCALAR_NAME) != 0)
 | 
			
		||||
            throw new();
 | 
			
		||||
        SerializedClass instanceSerializedClass = (SerializedClass)rootDeserializer(typeof(SerializedClass))!;
 | 
			
		||||
        stateEnable = (IStateEnable)instanceSerializedClass.CreateInstance(EntityRegistry);
 | 
			
		||||
        stateEnable = (IStateEnable)instanceSerializedClass.CreateInstance(IdentifiableRegistry);
 | 
			
		||||
 | 
			
		||||
        parser.Consume<MappingEnd>();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ public class UniverseObjectSerializer : EngineTypeYamlSerializerBase<IUniverseOb
 | 
			
		||||
            throw new();
 | 
			
		||||
        SerializedClass instanceSerializedClass = (SerializedClass)rootDeserializer(typeof(SerializedClass))!;
 | 
			
		||||
        ProgressionTracker.Set(isTrackingController ? .3f : ProgressionTracker.Progression, $"Creating {instanceSerializedClass.Type}");
 | 
			
		||||
        universeObject = (IUniverseObject)instanceSerializedClass.CreateInstance(EntityRegistry);
 | 
			
		||||
        universeObject = (IUniverseObject)instanceSerializedClass.CreateInstance(IdentifiableRegistry);
 | 
			
		||||
 | 
			
		||||
        if (parser.Consume<Scalar>().Value.CompareTo(nameof(IUniverseObject.StateEnable)) != 0)
 | 
			
		||||
            throw new();
 | 
			
		||||
 
 | 
			
		||||
@@ -17,14 +17,14 @@ public class YamlSerializer : Core.Serialization.ISerializer
 | 
			
		||||
    private readonly YamlDotNet.Serialization.ISerializer serializer = null!;
 | 
			
		||||
    private readonly YamlDotNet.Serialization.IDeserializer deserializer = null!;
 | 
			
		||||
 | 
			
		||||
    private readonly EntityRegistry entityRegistry = null!;
 | 
			
		||||
    private readonly IdentifiableRegistry identifiableRegistry = null!;
 | 
			
		||||
    private readonly IProgressionTracker progressionTracker = null!;
 | 
			
		||||
 | 
			
		||||
    private readonly System.Threading.Lock Lock = new();
 | 
			
		||||
 | 
			
		||||
    public YamlSerializer()
 | 
			
		||||
    {
 | 
			
		||||
        entityRegistry = new();
 | 
			
		||||
        identifiableRegistry = new();
 | 
			
		||||
        progressionTracker = new ProgressionTracker();
 | 
			
		||||
 | 
			
		||||
        SerializerBuilder serializerBuilder = new SerializerBuilder()
 | 
			
		||||
@@ -37,7 +37,7 @@ public class YamlSerializer : Core.Serialization.ISerializer
 | 
			
		||||
        foreach (IEngineTypeYamlConverter typeConverter in GetEngineYamlTypeConverters())
 | 
			
		||||
        {
 | 
			
		||||
            typeConverter.Serializer = this;
 | 
			
		||||
            typeConverter.EntityRegistry = entityRegistry;
 | 
			
		||||
            typeConverter.IdentifiableRegistry = identifiableRegistry;
 | 
			
		||||
            typeConverter.ProgressionTracker = progressionTracker;
 | 
			
		||||
 | 
			
		||||
            deserializerBuilder = deserializerBuilder.WithTypeConverter(typeConverter);
 | 
			
		||||
@@ -66,9 +66,9 @@ public class YamlSerializer : Core.Serialization.ISerializer
 | 
			
		||||
    {
 | 
			
		||||
        lock (Lock)
 | 
			
		||||
        {
 | 
			
		||||
            entityRegistry.Reset();
 | 
			
		||||
            identifiableRegistry.Reset();
 | 
			
		||||
            object result = deserializer.Deserialize(configuration)!;
 | 
			
		||||
            entityRegistry.AssignAll();
 | 
			
		||||
            identifiableRegistry.AssignAll();
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -77,9 +77,9 @@ public class YamlSerializer : Core.Serialization.ISerializer
 | 
			
		||||
    {
 | 
			
		||||
        lock (Lock)
 | 
			
		||||
        {
 | 
			
		||||
            entityRegistry.Reset();
 | 
			
		||||
            identifiableRegistry.Reset();
 | 
			
		||||
            object result = deserializer.Deserialize(configuration, type)!;
 | 
			
		||||
            entityRegistry.AssignAll();
 | 
			
		||||
            identifiableRegistry.AssignAll();
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -88,9 +88,9 @@ public class YamlSerializer : Core.Serialization.ISerializer
 | 
			
		||||
    {
 | 
			
		||||
        lock (Lock)
 | 
			
		||||
        {
 | 
			
		||||
            entityRegistry.Reset();
 | 
			
		||||
            identifiableRegistry.Reset();
 | 
			
		||||
            T result = deserializer.Deserialize<T>(configuration);
 | 
			
		||||
            entityRegistry.AssignAll();
 | 
			
		||||
            identifiableRegistry.AssignAll();
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user