GFramework/GFramework.Ecs.Arch/ArchSystemAdapter.cs
gewuyou ff553977e3 chore(license): 补齐 Apache-2.0 文件头治理
- 新增许可证文件头检查与修复脚本

- 补充维护者手动修复 PR 工作流和 CI 校验

- 更新贡献指南中的文件头说明

- 补齐仓库维护源码和配置文件的许可证声明
2026-05-03 19:39:49 +08:00

139 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.

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using Arch.Core;
using GFramework.Core.Extensions;
using GFramework.Core.Systems;
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()
{
}
}