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.

41 lines
1.3KB

  1. #if UNITY_NATIVE
  2. using Svelto.ECS.DataStructures;
  3. namespace Svelto.ECS
  4. {
  5. public readonly struct NativeEntityFactory
  6. {
  7. readonly AtomicNativeBags _addOperationQueue;
  8. readonly int _index;
  9. internal NativeEntityFactory(AtomicNativeBags addOperationQueue, int index)
  10. {
  11. _index = index;
  12. _addOperationQueue = addOperationQueue;
  13. }
  14. public NativeEntityInitializer BuildEntity
  15. (uint eindex, ExclusiveBuildGroup exclusiveBuildGroup, int threadIndex)
  16. {
  17. NativeBag unsafeBuffer = _addOperationQueue.GetBuffer(threadIndex + 1);
  18. unsafeBuffer.Enqueue(_index);
  19. unsafeBuffer.Enqueue(new EGID(eindex, exclusiveBuildGroup));
  20. unsafeBuffer.ReserveEnqueue<uint>(out var index) = 0;
  21. return new NativeEntityInitializer(unsafeBuffer, index);
  22. }
  23. public NativeEntityInitializer BuildEntity(EGID egid, int threadIndex)
  24. {
  25. NativeBag unsafeBuffer = _addOperationQueue.GetBuffer(threadIndex + 1);
  26. unsafeBuffer.Enqueue(_index);
  27. unsafeBuffer.Enqueue(new EGID(egid.entityID, egid.groupID));
  28. unsafeBuffer.ReserveEnqueue<uint>(out var index) = 0;
  29. return new NativeEntityInitializer(unsafeBuffer, index);
  30. }
  31. }
  32. }
  33. #endif