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.

SortedEnginesGroup.cs 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using Svelto.DataStructures;
  2. using Svelto.Common;
  3. namespace Svelto.ECS
  4. {
  5. public interface IStepEngine : IEngine
  6. {
  7. void Step();
  8. string name { get; }
  9. }
  10. public interface IStepEngine<T> : IEngine
  11. {
  12. void Step(ref T _param);
  13. string name { get; }
  14. }
  15. public interface IStepGroupEngine : IStepEngine
  16. {
  17. }
  18. public interface IStepGroupEngine<T> : IStepEngine<T>
  19. {
  20. }
  21. public abstract class SortedEnginesGroup<Interface, SequenceOrder> : IStepGroupEngine
  22. where SequenceOrder : struct, ISequenceOrder where Interface : IStepEngine
  23. {
  24. protected SortedEnginesGroup(FasterList<Interface> engines)
  25. {
  26. _name = "SortedEnginesGroup - "+this.GetType().Name;
  27. _instancedSequence = new Sequence<Interface, SequenceOrder>(engines);
  28. }
  29. public void Step()
  30. {
  31. var sequenceItems = _instancedSequence.items;
  32. using (var profiler = new PlatformProfiler(_name))
  33. {
  34. for (var index = 0; index < sequenceItems.count; index++)
  35. {
  36. var engine = sequenceItems[index];
  37. using (profiler.Sample(engine.name)) engine.Step();
  38. }
  39. }
  40. }
  41. public string name => _name;
  42. readonly string _name;
  43. readonly Sequence<Interface, SequenceOrder> _instancedSequence;
  44. }
  45. public abstract class SortedEnginesGroup<Interface, Parameter, SequenceOrder>: IStepGroupEngine<Parameter>
  46. where SequenceOrder : struct, ISequenceOrder where Interface : IStepEngine<Parameter>
  47. {
  48. protected SortedEnginesGroup(FasterList<Interface> engines)
  49. {
  50. _name = "SortedEnginesGroup - "+this.GetType().Name;
  51. _instancedSequence = new Sequence<Interface, SequenceOrder>(engines);
  52. }
  53. public void Step(ref Parameter param)
  54. {
  55. var sequenceItems = _instancedSequence.items;
  56. using (var profiler = new PlatformProfiler(_name))
  57. {
  58. for (var index = 0; index < sequenceItems.count; index++)
  59. {
  60. var engine = sequenceItems[index];
  61. using (profiler.Sample(engine.name)) engine.Step(ref param);
  62. }
  63. }
  64. }
  65. public string name => _name;
  66. readonly string _name;
  67. readonly Sequence<Interface, SequenceOrder> _instancedSequence;
  68. }
  69. }