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(ExclusiveGroup.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 EntityViews to build. The Implementors are passed to fill the /// references of the EntityViews 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 views /// are grouped by groupID to be more efficiently processed inside engines and /// improve cache locality. Either class entityViews and struct entityViews can be /// grouped. /// /// /// /// /// EntityStructInitializer BuildEntity(uint entityID, ExclusiveGroup.ExclusiveGroupStruct groupStructId, IEnumerable implementors = null) where T : IEntityDescriptor, new(); EntityStructInitializer BuildEntity(EGID egid, IEnumerable implementors = null) where T:IEntityDescriptor, new(); /// /// When the type of the entity is not known (this is a special case!) an EntityDescriptorInfo /// can be built in place of the generic parameter T. /// /// /// /// /// EntityStructInitializer BuildEntity(uint entityID, ExclusiveGroup.ExclusiveGroupStruct groupStructId, T descriptorEntity, IEnumerable implementors = null) where T : IEntityDescriptor; EntityStructInitializer BuildEntity(EGID egid, T entityDescriptor, IEnumerable implementors = null) where T : IEntityDescriptor; } }