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.

63 lines
2.8KB

  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. where T : IEntityDescriptor, new();
  42. EntityInitializer BuildEntity<T>(EGID egid, IEnumerable<object> implementors = null)
  43. where T : IEntityDescriptor, new();
  44. EntityInitializer BuildEntity<T>(uint entityID, ExclusiveBuildGroup groupStructId,
  45. T descriptorEntity, IEnumerable<object> implementors = null)
  46. where T : IEntityDescriptor;
  47. EntityInitializer BuildEntity<T>(EGID egid, T entityDescriptor, IEnumerable<object> implementors = null)
  48. where T : IEntityDescriptor;
  49. //Todo: analyze if this can be internal or just related to serialization
  50. EntityInitializer BuildEntity
  51. (EGID egid, IComponentBuilder[] componentsToBuild, Type descriptorType, IEnumerable<object> implementors = null);
  52. #if UNITY_NATIVE
  53. Svelto.ECS.Native.NativeEntityFactory ToNative<T>(string callerName) where T : IEntityDescriptor, new();
  54. #endif
  55. }
  56. }