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