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() { return _enumerator; }
  12. public IEnumerator<bool> SubmitEntitiesAsync(uint maxNumberOfOperations)
  13. {
  14. EnginesRoot.EntitiesSubmitter entitiesSubmitter = _onTick.Value;
  15. entitiesSubmitter.maxNumberOfOperationsPerFrame = maxNumberOfOperations;
  16. while (true)
  17. {
  18. if (paused == false)
  19. {
  20. var entitiesSubmitterSubmitEntities = entitiesSubmitter.submitEntities;
  21. entitiesSubmitterSubmitEntities.MoveNext();
  22. if (entitiesSubmitterSubmitEntities.Current == true)
  23. yield return true;
  24. else
  25. yield return false;
  26. }
  27. }
  28. }
  29. public void SubmitEntities()
  30. {
  31. _enumerator.MoveNext();
  32. while (_enumerator.Current == true)
  33. _enumerator.MoveNext();
  34. }
  35. public override bool paused { get; set; }
  36. public override void Dispose() { }
  37. protected internal override EnginesRoot.EntitiesSubmitter onTick
  38. {
  39. set
  40. {
  41. DBC.ECS.Check.Require(_onTick == null, "a scheduler can be exclusively used by one enginesRoot only");
  42. _onTick = value;
  43. }
  44. }
  45. EnginesRoot.EntitiesSubmitter? _onTick;
  46. readonly IEnumerator<bool> _enumerator;
  47. }
  48. }