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 : IDynamicEntityDescriptor 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(IComponentBuilder[] 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(IComponentBuilder[] extraEntities)
{
_dynamicDescriptor.ExtendWith(extraEntities);
return this;
}
public IComponentBuilder[] componentsToBuild => _dynamicDescriptor.componentsToBuild;
DynamicEntityDescriptor _dynamicDescriptor;
}
}