GFramework/GFramework.Ecs.Arch/ArchSystemAdapter.cs
GeWuYou fb14d7122c docs(style): 更新文档中的命名空间导入格式
- 将所有小写的命名空间导入更正为首字母大写格式
- 统一 GFramework 框架的命名空间引用规范
- 修复 core、ecs、godot 等模块的命名空间导入错误
- 标准化文档示例代码中的 using 语句格式
- 确保所有文档中的命名空间引用保持一致性
- 更新 global using 语句以匹配正确的命名空间格式
2026-03-10 07:18:49 +08:00

137 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Arch.Core;
using GFramework.Core.Extensions;
using GFramework.Core.System;
using GFramework.Ecs.Arch.Abstractions;
using ArchSys = Arch.System;
namespace GFramework.Ecs.Arch;
/// <summary>
/// Arch 系统适配器 - 桥接 Arch.System.ISystem&lt;T&gt; 到框架上下文
/// </summary>
/// <typeparam name="T">系统数据类型(通常是 float 表示 deltaTime</typeparam>
public abstract class ArchSystemAdapter<T> : AbstractSystem, IArchSystemAdapter<T>, ArchSys.ISystem<T>
{
/// <summary>
/// 获取或设置 Arch ECS 世界的实例
/// </summary>
public World World { get; private set; } = null!;
/// <summary>
/// 显式实现 Arch.System.ISystem&lt;T&gt; 的主更新方法
/// 调用受保护的虚方法 OnUpdate 以强制子类实现核心更新逻辑
/// </summary>
/// <param name="t">系统数据参数(通常是 deltaTime</param>
public void Update(in T t)
{
OnUpdate(in t);
}
// ===== Arch 显式接口实现 =====
/// <summary>
/// 显式实现 Arch.System.ISystem&lt;T&gt; 的初始化方法
/// 调用受保护的虚方法 OnArchInitialize 以允许子类自定义初始化逻辑
/// </summary>
void ArchSys.ISystem<T>.Initialize()
{
OnArchInitialize();
}
/// <summary>
/// 显式实现 Arch.System.ISystem&lt;T&gt; 的更新前回调方法
/// 调用受保护的虚方法 OnBeforeUpdate 以允许子类自定义预处理逻辑
/// </summary>
/// <param name="t">系统数据参数(通常是 deltaTime</param>
void ArchSys.ISystem<T>.BeforeUpdate(in T t)
{
OnBeforeUpdate(in t);
}
/// <summary>
/// 显式实现 Arch.System.ISystem&lt;T&gt; 的更新后回调方法
/// 调用受保护的虚方法 OnAfterUpdate 以允许子类自定义后处理逻辑
/// </summary>
/// <param name="t">系统数据参数(通常是 deltaTime</param>
void ArchSys.ISystem<T>.AfterUpdate(in T t)
{
OnAfterUpdate(in t);
}
/// <summary>
/// 显式实现 IDisposable 的资源释放方法
/// 调用受保护的虚方法 OnArchDispose 以允许子类自定义资源清理逻辑
/// </summary>
void IDisposable.Dispose()
{
OnArchDispose();
}
// ===== GFramework 生命周期 =====
/// <summary>
/// 系统初始化方法
/// 在此方法中获取 Arch World 实例并调用 Arch 系统的初始化逻辑
/// </summary>
protected override void OnInit()
{
World = this.GetService<World>()!;
// 调用 Arch 初始化
((ArchSys.ISystem<T>)this).Initialize();
}
/// <summary>
/// 系统销毁方法
/// 在此方法中调用 Arch 系统的资源释放逻辑
/// </summary>
protected override void OnDestroy()
{
((ArchSys.ISystem<T>)this).Dispose();
}
// ===== 子类可重写 Hook =====
/// <summary>
/// Arch 系统初始化的受保护虚方法
/// 子类可重写此方法以实现自定义的 Arch 系统初始化逻辑
/// </summary>
protected virtual void OnArchInitialize()
{
}
/// <summary>
/// 更新前处理的受保护虚方法
/// 子类可重写此方法以实现自定义的预处理逻辑
/// </summary>
/// <param name="t">系统数据参数(通常是 deltaTime</param>
protected virtual void OnBeforeUpdate(in T t)
{
}
/// <summary>
/// 受保护虚方法,在系统更新时被调用。
/// 默认实现不执行任何操作,子类可以根据需要选择性地重写此方法以实现具体的系统逻辑。
/// </summary>
/// <param name="t">系统数据参数(通常是 deltaTime</param>
protected virtual void OnUpdate(in T t)
{
}
/// <summary>
/// 更新后处理的受保护虚方法
/// 子类可重写此方法以实现自定义的后处理逻辑
/// </summary>
/// <param name="t">系统数据参数(通常是 deltaTime</param>
protected virtual void OnAfterUpdate(in T t)
{
}
/// <summary>
/// Arch 系统资源释放的受保护虚方法
/// 子类可重写此方法以实现自定义的资源清理逻辑
/// </summary>
protected virtual void OnArchDispose()
{
}
}