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.

NativeEntityFactory.cs 1.3KB

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