mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 将架构服务重构为模块化设计,引入ServiceModuleManager统一管理 - 新增EventBusModule、CommandExecutorModule、QueryExecutorModule等核心服务模块 - 实现ECS模块支持,可配置启用Entity Component System功能 - 在架构初始化过程中集成模块注册、初始化和销毁流程 - 更新架构属性配置,添加EnableEcs开关控制ECS功能启用 - 优化服务获取方式,从直接依赖改为通过容器动态获取 - 移除架构上下文中的ECS相关实现代码,统一由ECS模块管理
110 lines
3.2 KiB
C#
110 lines
3.2 KiB
C#
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;
|
||
|
||
/// <summary>
|
||
/// ECS(Entity Component System)模块,用于注册、初始化和管理ECS相关服务。
|
||
/// 该模块负责创建ECS世界和系统运行器,并将其注册到依赖注入容器中。
|
||
/// </summary>
|
||
public sealed class EcsModule : IServiceModule
|
||
{
|
||
private EcsSystemRunner? _ecsRunner;
|
||
|
||
private EcsWorld? _ecsWorld;
|
||
|
||
/// <summary>
|
||
/// 构造函数,初始化ECS模块。
|
||
/// </summary>
|
||
/// <param name="enabled">指定模块是否启用,默认为 true。</param>
|
||
public EcsModule(bool enabled = true)
|
||
{
|
||
IsEnabled = enabled;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取模块名称。
|
||
/// </summary>
|
||
public string ModuleName => nameof(EcsModule);
|
||
|
||
/// <summary>
|
||
/// 获取模块优先级,数值越小优先级越高。
|
||
/// </summary>
|
||
public int Priority => 100;
|
||
|
||
/// <summary>
|
||
/// 获取模块启用状态。
|
||
/// </summary>
|
||
public bool IsEnabled { get; }
|
||
|
||
/// <summary>
|
||
/// 注册ECS相关服务到依赖注入容器中。
|
||
/// 包括ECS世界实例和系统运行器实例的注册。
|
||
/// </summary>
|
||
/// <param name="container">依赖注入容器实例。</param>
|
||
public void Register(IIocContainer container)
|
||
{
|
||
if (!IsEnabled) return;
|
||
|
||
_ecsWorld = new EcsWorld();
|
||
container.Register(_ecsWorld);
|
||
container.Register<IEcsWorld>(_ecsWorld);
|
||
|
||
container.RegisterPlurality<EcsSystemRunner>();
|
||
_ecsRunner = container.Get<EcsSystemRunner>();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 初始化ECS模块。
|
||
/// 如果系统运行器实现了IInitializable接口,则调用其初始化方法。
|
||
/// </summary>
|
||
public void Initialize()
|
||
{
|
||
if (!IsEnabled || _ecsRunner == null) return;
|
||
|
||
if (_ecsRunner is IInitializable initializable)
|
||
{
|
||
initializable.Initialize();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 异步销毁ECS模块并释放相关资源。
|
||
/// 包括销毁系统运行器和释放ECS世界资源。
|
||
/// </summary>
|
||
/// <returns>表示异步操作完成的任务。</returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取ECS世界实例。
|
||
/// </summary>
|
||
/// <returns>ECS世界实例,如果未启用则返回 null。</returns>
|
||
public IEcsWorld? GetEcsWorld() => _ecsWorld;
|
||
|
||
/// <summary>
|
||
/// 获取ECS系统运行器实例(内部使用)。
|
||
/// </summary>
|
||
/// <returns>ECS系统运行器实例,如果未启用则返回 null。</returns>
|
||
internal EcsSystemRunner? GetEcsRunner() => _ecsRunner;
|
||
} |