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 EntityInitializer BuildEntity (uint entityID, ExclusiveBuildGroup groupStructId, IEnumerable implementors = null) where T : IEntityDescriptor, new() { return _enginesRoot.Target.BuildEntity(new EGID(entityID, groupStructId) , EntityDescriptorTemplate.descriptor.componentsToBuild , TypeCache.type, implementors); } public EntityInitializer BuildEntity(EGID egid, IEnumerable implementors = null) where T : IEntityDescriptor, new() { return _enginesRoot.Target.BuildEntity( egid, EntityDescriptorTemplate.descriptor.componentsToBuild, TypeCache.type, implementors); } public EntityInitializer BuildEntity (EGID egid, T entityDescriptor, IEnumerable implementors) where T : IEntityDescriptor { return _enginesRoot.Target.BuildEntity(egid, entityDescriptor.componentsToBuild, TypeCache.type, implementors); } public EntityInitializer BuildEntity (uint entityID, ExclusiveBuildGroup 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 numberOfEntities) where T : IEntityDescriptor, new() { _enginesRoot.Target.Preallocate(groupStructId, numberOfEntities, EntityDescriptorTemplate.descriptor.componentsToBuild); } public EntityInitializer BuildEntity(EGID egid, IComponentBuilder[] componentsToBuild, Type type, IEnumerable implementors = null) { return _enginesRoot.Target.BuildEntity(egid, componentsToBuild, type, implementors); } #if UNITY_NATIVE public Svelto.ECS.Native.NativeEntityFactory ToNative(string callerName) where T : IEntityDescriptor, new() { return _enginesRoot.Target.ProvideNativeEntityFactoryQueue(callerName); } #endif //enginesRoot is a weakreference because GenericEntityStreamConsumerFactory can be injected inside //engines of other enginesRoot readonly Svelto.DataStructures.WeakReference _enginesRoot; } } }