using Svelto.DataStructures; using Svelto.Common; namespace Svelto.ECS { public interface IStepEngine : IEngine { void Step(); string name { get; } } public interface IStepEngine : IEngine { void Step(ref T _param); string name { get; } } public interface IStepGroupEngine : IStepEngine { } public interface IStepGroupEngine : IStepEngine { } public abstract class SortedEnginesGroup : IStepGroupEngine where SequenceOrder : struct, ISequenceOrder where Interface : IStepEngine { protected SortedEnginesGroup(FasterList engines) { _name = "SortedEnginesGroup - "+this.GetType().Name; _instancedSequence = new Sequence(engines); } public void Step() { var sequenceItems = _instancedSequence.items; using (var profiler = new PlatformProfiler(_name)) { for (var index = 0; index < sequenceItems.count; index++) { var engine = sequenceItems[index]; using (profiler.Sample(engine.name)) engine.Step(); } } } public string name => _name; readonly string _name; readonly Sequence _instancedSequence; } public abstract class SortedEnginesGroup: IStepGroupEngine where SequenceOrder : struct, ISequenceOrder where Interface : IStepEngine { protected SortedEnginesGroup(FasterList engines) { _name = "SortedEnginesGroup - "+this.GetType().Name; _instancedSequence = new Sequence(engines); } public void Step(ref Parameter param) { var sequenceItems = _instancedSequence.items; using (var profiler = new PlatformProfiler(_name)) { for (var index = 0; index < sequenceItems.count; index++) { var engine = sequenceItems[index]; using (profiler.Sample(engine.name)) engine.Step(ref param); } } } public string name => _name; readonly string _name; readonly Sequence _instancedSequence; } }