using System; using System.Collections.Generic; namespace Svelto.ECS { /// /// Entities are always built in group. Where the group is not specificed, a special standard group is used /// ID can be reused within groups /// an EnginesRoot reference cannot be held by anything else than the Composition Root /// where it has been created. IEntityFactory and IEntityFunctions allow a weakreference /// of the EnginesRoot to be passed around. /// /// ExclusiveGroups must be used in your game like: /// static class GameExclusiveGroup ///{ /// public static readonly ExclusiveGroups PlayerEntitiesGroup = new ExclusiveGroups(); ///} /// /// public interface IEntityFactory { /// /// where performance is critical, you may wish to pre allocate the space needed /// to store the entities /// /// /// /// void PreallocateEntitySpace(ExclusiveGroupStruct groupStructId, uint size) where T : IEntityDescriptor, new(); /// /// The EntityDescriptor doesn't need to be ever instantiated. It just describes the Entity /// itself in terms of EntityComponents to build. The Implementors are passed to fill the /// references of the EntityComponents components. Please read the articles on my blog /// to understand better the terminologies /// Using this function is like building a normal entity, but the entity components /// are grouped by groupID to be more efficiently processed inside engines and /// improve cache locality. Either class entityComponents and struct entityComponents can be /// grouped. /// /// /// /// /// EntityComponentInitializer BuildEntity(uint entityID, BuildGroup groupStructId, IEnumerable implementors = null) where T : IEntityDescriptor, new(); EntityComponentInitializer BuildEntity(EGID egid, IEnumerable implementors = null) where T : IEntityDescriptor, new(); EntityComponentInitializer BuildEntity(uint entityID, BuildGroup groupStructId, T descriptorEntity, IEnumerable implementors = null) where T : IEntityDescriptor; EntityComponentInitializer BuildEntity(EGID egid, T entityDescriptor, IEnumerable implementors = null) where T : IEntityDescriptor; EntityComponentInitializer BuildEntity (EGID egid, IComponentBuilder[] componentsToBuild, Type type, IEnumerable implementors = null); #if UNITY_NATIVE NativeEntityFactory ToNative(string memberName) where T : IEntityDescriptor, new(); #endif } }