using GFramework.Core.Abstractions.architecture; using GFramework.Core.Abstractions.ecs; using GFramework.Core.Abstractions.ioc; using GFramework.Core.Abstractions.lifecycle; using GFramework.Core.ecs; namespace GFramework.Core.services.modules; /// /// ECS(Entity Component System)模块,用于注册、初始化和管理ECS相关服务。 /// 该模块负责创建ECS世界和系统运行器,并将其注册到依赖注入容器中。 /// public sealed class EcsModule : IServiceModule { private EcsSystemRunner? _ecsRunner; private EcsWorld? _ecsWorld; /// /// 构造函数,初始化ECS模块。 /// /// 指定模块是否启用,默认为 true。 public EcsModule(bool enabled = true) { IsEnabled = enabled; } /// /// 获取模块名称。 /// public string ModuleName => nameof(EcsModule); /// /// 获取模块优先级,数值越小优先级越高。 /// public int Priority => 100; /// /// 获取模块启用状态。 /// public bool IsEnabled { get; } /// /// 注册ECS相关服务到依赖注入容器中。 /// 包括ECS世界实例和系统运行器实例的注册。 /// /// 依赖注入容器实例。 public void Register(IIocContainer container) { if (!IsEnabled) return; _ecsWorld = new EcsWorld(); container.Register(_ecsWorld); container.Register(_ecsWorld); container.RegisterPlurality(); _ecsRunner = container.Get(); } /// /// 初始化ECS模块。 /// 如果系统运行器实现了IInitializable接口,则调用其初始化方法。 /// public void Initialize() { if (!IsEnabled || _ecsRunner == null) return; if (_ecsRunner is IInitializable initializable) { initializable.Initialize(); } } /// /// 异步销毁ECS模块并释放相关资源。 /// 包括销毁系统运行器和释放ECS世界资源。 /// /// 表示异步操作完成的任务。 public async ValueTask DestroyAsync() { if (!IsEnabled) return; if (_ecsRunner is IDestroyable destroyable) { destroyable.Destroy(); } _ecsRunner = null; if (_ecsWorld != null) { _ecsWorld.Dispose(); _ecsWorld = null; } await ValueTask.CompletedTask; } /// /// 获取ECS世界实例。 /// /// ECS世界实例,如果未启用则返回 null。 public IEcsWorld? GetEcsWorld() => _ecsWorld; /// /// 获取ECS系统运行器实例(内部使用)。 /// /// ECS系统运行器实例,如果未启用则返回 null。 internal EcsSystemRunner? GetEcsRunner() => _ecsRunner; }