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.

65 lines
3.2KB

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