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.

60 lines
1.8KB

  1. using System;
  2. using System.Collections.Generic;
  3. namespace Svelto.ECS.Schedulers
  4. {
  5. public sealed class SimpleEntitiesSubmissionScheduler : EntitiesSubmissionScheduler
  6. {
  7. public SimpleEntitiesSubmissionScheduler(uint maxNumberOfOperationsPerFrame = UInt32.MaxValue)
  8. {
  9. _enumerator = SubmitEntitiesAsync(maxNumberOfOperationsPerFrame);
  10. }
  11. public IEnumerator<bool> SubmitEntitiesAsync()
  12. {
  13. return _enumerator;
  14. }
  15. public IEnumerator<bool> SubmitEntitiesAsync(uint maxNumberOfOperations)
  16. {
  17. EnginesRoot.EntitiesSubmitter entitiesSubmitter = _onTick.Value;
  18. entitiesSubmitter.maxNumberOfOperationsPerFrame = maxNumberOfOperations;
  19. while (true)
  20. {
  21. if (paused == false)
  22. {
  23. var entitiesSubmitterSubmitEntities = entitiesSubmitter.submitEntities;
  24. entitiesSubmitterSubmitEntities.MoveNext();
  25. yield return entitiesSubmitterSubmitEntities.Current == true;
  26. }
  27. }
  28. }
  29. public void SubmitEntities()
  30. {
  31. do
  32. {
  33. _enumerator.MoveNext();
  34. } while (_enumerator.Current == true);
  35. }
  36. public override bool paused { get; set; }
  37. public override void Dispose() { }
  38. protected internal override EnginesRoot.EntitiesSubmitter onTick
  39. {
  40. set
  41. {
  42. DBC.ECS.Check.Require(_onTick == null, "a scheduler can be exclusively used by one enginesRoot only");
  43. _onTick = value;
  44. }
  45. }
  46. EnginesRoot.EntitiesSubmitter? _onTick;
  47. readonly IEnumerator<bool> _enumerator;
  48. }
  49. }