DragonECS/src/Builtin/Runners.cs

147 lines
4.0 KiB
C#
Raw Normal View History

2023-03-12 02:02:39 +08:00
namespace DCFApixels.DragonECS
{
2023-03-12 20:45:18 +08:00
public interface IEcsPreInitSystem : IEcsSystem
2023-03-12 02:02:39 +08:00
{
2023-03-26 11:19:03 +08:00
public void PreInit(EcsSystems systems);
2023-03-12 02:02:39 +08:00
}
2023-03-12 20:45:18 +08:00
public interface IEcsInitSystem : IEcsSystem
2023-03-12 02:02:39 +08:00
{
2023-03-26 11:19:03 +08:00
public void Init(EcsSystems systems);
2023-03-12 02:02:39 +08:00
}
2023-03-12 20:45:18 +08:00
public interface IEcsRunSystem : IEcsSystem
2023-03-12 02:02:39 +08:00
{
2023-03-26 11:19:03 +08:00
public void Run(EcsSystems systems);
2023-03-12 02:02:39 +08:00
}
2023-03-12 20:45:18 +08:00
public interface IEcsDestroySystem : IEcsSystem
2023-03-12 02:02:39 +08:00
{
2023-03-26 11:19:03 +08:00
public void Destroy(EcsSystems systems);
2023-03-12 02:02:39 +08:00
}
2023-03-26 11:19:03 +08:00
public interface IEcsBaseSystem : IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem { }
2023-03-12 02:02:39 +08:00
public sealed class EcsPreInitRunner : EcsRunner<IEcsPreInitSystem>, IEcsPreInitSystem
{
#if DEBUG
private int[] _targetIds;
#endif
public void PreInit(EcsSystems systems)
2023-03-12 02:02:39 +08:00
{
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].PreInit(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
2023-03-26 11:19:03 +08:00
foreach (var item in targets) item.PreInit(systems);
#endif
2023-03-12 02:02:39 +08:00
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(PreInit)}");
}
}
#endif
2023-03-12 02:02:39 +08:00
}
public sealed class EcsInitRunner : EcsRunner<IEcsInitSystem>, IEcsInitSystem
{
#if DEBUG
private int[] _targetIds;
#endif
public void Init(EcsSystems systems)
2023-03-12 02:02:39 +08:00
{
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].Init(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
2023-03-26 11:19:03 +08:00
foreach (var item in targets) item.Init(systems);
#endif
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(Init)}");
}
2023-03-12 02:02:39 +08:00
}
#endif
2023-03-12 02:02:39 +08:00
}
public sealed class EcsRunRunner : EcsRunner<IEcsRunSystem>, IEcsRunSystem
{
#if DEBUG
private int[] _targetIds;
#endif
public void Run(EcsSystems systems)
2023-03-12 02:02:39 +08:00
{
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].Run(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
2023-03-26 11:19:03 +08:00
foreach (var item in targets) item.Run(systems);
#endif
2023-03-12 02:02:39 +08:00
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(Run)}");
}
}
#endif
2023-03-12 02:02:39 +08:00
}
public sealed class EcsDestroyRunner : EcsRunner<IEcsDestroySystem>, IEcsDestroySystem
{
#if DEBUG
private int[] _targetIds;
#endif
public void Destroy(EcsSystems systems)
2023-03-12 02:02:39 +08:00
{
#if DEBUG
for (int i = 0; i < targets.Length; i++)
{
int id = _targetIds[i];
EcsDebug.ProfileMarkBegin(id);
targets[i].Destroy(systems);
EcsDebug.ProfileMarkEnd(id);
}
#else
2023-03-26 11:19:03 +08:00
foreach (var item in targets) item.Destroy(systems);
#endif
}
#if DEBUG
protected override void OnSetup()
{
_targetIds = new int[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
_targetIds[i] = EcsDebug.RegisterMark($"EcsRunner.{targets[i].GetType().Name}.{nameof(Destroy)}");
}
2023-03-12 02:02:39 +08:00
}
#endif
2023-03-12 02:02:39 +08:00
}
}