using System; using System.Collections.Generic; using Svelto.Common; namespace Svelto.ECS { public partial class EnginesRoot { class GenericEntityFactory : IEntityFactory { public GenericEntityFactory(EnginesRoot weakReference) { _enginesRoot = new Svelto.DataStructures.WeakReference(weakReference); } public EntityComponentInitializer BuildEntity (uint entityID, BuildGroup groupStructId, IEnumerable implementors = null) where T : IEntityDescriptor, new() { return _enginesRoot.Target.BuildEntity(new EGID(entityID, groupStructId) , EntityDescriptorTemplate.descriptor.componentsToBuild , TypeCache.type, implementors); } public EntityComponentInitializer BuildEntity(EGID egid, IEnumerable implementors = null) where T : IEntityDescriptor, new() { return _enginesRoot.Target.BuildEntity( egid, EntityDescriptorTemplate.descriptor.componentsToBuild, TypeCache.type, implementors); } public EntityComponentInitializer BuildEntity (EGID egid, T entityDescriptor, IEnumerable implementors) where T : IEntityDescriptor { return _enginesRoot.Target.BuildEntity(egid, entityDescriptor.componentsToBuild, TypeCache.type, implementors); } #if UNITY_NATIVE public NativeEntityFactory ToNative(string memberName) where T : IEntityDescriptor, new() { return _enginesRoot.Target.ProvideNativeEntityFactoryQueue(memberName); } #endif public EntityComponentInitializer BuildEntity (uint entityID, BuildGroup groupStructId, T descriptorEntity, IEnumerable implementors) where T : IEntityDescriptor { return _enginesRoot.Target.BuildEntity(new EGID(entityID, groupStructId) , descriptorEntity.componentsToBuild, TypeCache.type, implementors); } public void PreallocateEntitySpace(ExclusiveGroupStruct groupStructId, uint size) where T : IEntityDescriptor, new() { _enginesRoot.Target.Preallocate(groupStructId, size); } public EntityComponentInitializer BuildEntity(EGID egid, IComponentBuilder[] componentsToBuild, Type type, IEnumerable implementors = null) { return _enginesRoot.Target.BuildEntity(egid, componentsToBuild, type, implementors); } //enginesRoot is a weakreference because GenericEntityStreamConsumerFactory can be injected inside //engines of other enginesRoot readonly Svelto.DataStructures.WeakReference _enginesRoot; } } }