using System; using Svelto.ECS.Internal; namespace Svelto.ECS.Serialization { public class ComposedComponentSerializer : IComponentSerializer where T : unmanaged, _IInternalEntityComponent where X : class, IComponentSerializer, new() where Y : class, IComponentSerializer, new() { public ComposedComponentSerializer() { _serializers = new IComponentSerializer[2]; _serializers[0] = new X(); _serializers[1] = new Y(); } public bool Serialize(in T value, ISerializationData serializationData) { foreach (IComponentSerializer s in _serializers) { serializationData.data.IncrementCountBy((uint)s.size); if (s.SerializeSafe(value, serializationData)) return true; } throw new Exception($"ComposedComponentSerializer for {typeof(T)} did not serialize any data!"); } public bool Deserialize(ref T value, ISerializationData serializationData) { foreach (IComponentSerializer s in _serializers) { if (s.DeserializeSafe(ref value, serializationData)) return true; } throw new Exception($"ComposedComponentSerializer for {typeof(T)} did not deserialize any data!"); } public uint size => 0; readonly IComponentSerializer[] _serializers; } }