using GFramework.Core.Abstractions.ecs;
using GFramework.Core.extensions;
using GFramework.Core.system;
namespace GFramework.Core.ecs;
///
/// ECS系统调度器,负责管理和更新所有ECS系统
///
public sealed class EcsSystemRunner : AbstractSystem
{
private readonly List _systems = new();
private bool _isRunning;
///
/// 初始化调度器,从DI容器获取所有ECS系统
///
protected override void OnInit()
{
// 从容器获取所有已注册的ECS系统
var systemsList = this.GetService>();
if (systemsList is { Count: > 0 })
{
// 按优先级排序
_systems.AddRange(systemsList.OrderBy(s => s.Priority));
}
}
///
/// 更新所有ECS系统
///
/// 帧间隔时间
public void Update(float deltaTime)
{
if (!_isRunning) return;
foreach (var system in _systems)
{
system.Update(deltaTime);
}
}
///
/// 启动调度器
///
public void Start()
{
_isRunning = true;
}
///
/// 停止调度器
///
public void Stop()
{
_isRunning = false;
}
///
/// 销毁调度器
///
protected override void OnDestroy()
{
Stop();
_systems.Clear();
}
}