Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.8KB

  1. using System.Collections.Generic;
  2. namespace Svelto.ECS
  3. {
  4. /// <summary>
  5. /// Entities are always built in group. Where the group is not specificed, a special standard group is used
  6. /// ID can be reused within groups
  7. /// an EnginesRoot reference cannot be held by anything else than the Composition Root
  8. /// where it has been created. IEntityFactory and IEntityFunctions allow a weakreference
  9. /// of the EnginesRoot to be passed around.
  10. ///
  11. /// ExclusiveGroups must be used in your game like:
  12. /// static class GameExclusiveGroup
  13. ///{
  14. /// public static readonly ExclusiveGroups PlayerEntitiesGroup = new ExclusiveGroups();
  15. ///}
  16. ///
  17. /// </summary>
  18. public interface IEntityFactory
  19. {
  20. /// <summary>
  21. /// where performance is critical, you may wish to pre allocate the space needed
  22. /// to store the entities
  23. /// </summary>
  24. /// <typeparam name="T"></typeparam>
  25. /// <param name="groupStructId"></param>
  26. /// <param name="numberOfEntities"></param>
  27. void PreallocateEntitySpace<T>(ExclusiveGroupStruct groupStructId, uint numberOfEntities)
  28. where T : IEntityDescriptor, new();
  29. /// <summary>
  30. /// The EntityDescriptor doesn't need to be ever instantiated. It just describes the Entity
  31. /// itself in terms of EntityComponents to build. The Implementors are passed to fill the
  32. /// references of the Entity View Components components if present.
  33. /// </summary>
  34. /// <param name="entityID"></param>
  35. /// <param name="groupStructId"></param>
  36. /// <param name="ed"></param>
  37. /// <param name="implementors"></param>
  38. EntityInitializer BuildEntity<T>(uint entityID, ExclusiveBuildGroup groupStructId,
  39. IEnumerable<object> implementors = null,
  40. [System.Runtime.CompilerServices.CallerMemberName] string caller = null) where T : IEntityDescriptor, new();
  41. EntityInitializer BuildEntity<T>(EGID egid, IEnumerable<object> implementors = null,
  42. [System.Runtime.CompilerServices.CallerMemberName] string caller = null) where T : IEntityDescriptor, new();
  43. EntityInitializer BuildEntity<T>(uint entityID, ExclusiveBuildGroup groupStructId, T descriptorEntity,
  44. IEnumerable<object> implementors = null,
  45. [System.Runtime.CompilerServices.CallerMemberName] string caller = null) where T : IEntityDescriptor;
  46. EntityInitializer BuildEntity<T>(EGID egid, T entityDescriptor, IEnumerable<object> implementors = null,
  47. [System.Runtime.CompilerServices.CallerMemberName] string caller = null) where T : IEntityDescriptor;
  48. #if UNITY_NATIVE
  49. Svelto.ECS.Native.NativeEntityFactory ToNative<T>([System.Runtime.CompilerServices.CallerMemberName] string callerName
  50. = null) where T : IEntityDescriptor, new();
  51. #endif
  52. }
  53. }