using System; using Svelto.ECS.Serialization; namespace Svelto.ECS { /// /// Inherit from an ExtendibleEntityDescriptor to extend a base entity descriptor that can be used /// to swap and remove specialized entities from abstract engines /// /// public class ExtendibleEntityDescriptor : IEntityDescriptor where TType : IEntityDescriptor, new() { static ExtendibleEntityDescriptor() { if (typeof(ISerializableEntityDescriptor).IsAssignableFrom(typeof(TType))) throw new Exception( $"SerializableEntityDescriptors cannot be used as base entity descriptor: {typeof(TType)}"); } public ExtendibleEntityDescriptor(IEntityBuilder[] extraEntities) { _dynamicDescriptor = new DynamicEntityDescriptor(extraEntities); } public ExtendibleEntityDescriptor() { _dynamicDescriptor = new DynamicEntityDescriptor(true); } public ExtendibleEntityDescriptor ExtendWith() where T : IEntityDescriptor, new() { _dynamicDescriptor.ExtendWith(); return this; } public ExtendibleEntityDescriptor ExtendWith(IEntityBuilder[] extraEntities) { _dynamicDescriptor.ExtendWith(extraEntities); return this; } public IEntityBuilder[] entitiesToBuild => _dynamicDescriptor.entitiesToBuild; DynamicEntityDescriptor _dynamicDescriptor; } }