mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 在ArchitectureContext中添加ECS世界和系统调度器支持 - 添加IEcsWorld和IEcsSystem接口定义 - 实现EcsWorld、EcsSystemBase和EcsSystemRunner核心类 - 添加Position和Velocity示例组件及MovementSystem示例 - 创建ECS使用示例代码 - 将多个项目的TargetFramework从netstandard2.0升级到netstandard2.1 - 添加Arch和Arch.System包依赖到核心项目 - 在测试项目中添加ECS相关接口的模拟实现
62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
using Arch.Core;
|
||
using GFramework.Core.Abstractions.ecs;
|
||
using GFramework.Core.system;
|
||
|
||
namespace GFramework.Core.ecs;
|
||
|
||
/// <summary>
|
||
/// ECS系统基类,继承自AbstractSystem以集成到现有架构
|
||
/// </summary>
|
||
public abstract class EcsSystemBase : AbstractSystem, IEcsSystem
|
||
{
|
||
/// <summary>
|
||
/// ECS世界实例
|
||
/// </summary>
|
||
protected EcsWorld EcsWorld { get; private set; } = null!;
|
||
|
||
/// <summary>
|
||
/// 快捷访问内部World
|
||
/// </summary>
|
||
protected World World => EcsWorld.InternalWorld;
|
||
|
||
/// <summary>
|
||
/// 系统优先级,默认为0
|
||
/// </summary>
|
||
public virtual int Priority => 0;
|
||
|
||
/// <summary>
|
||
/// 每帧更新(子类实现)
|
||
/// </summary>
|
||
public abstract void Update(float deltaTime);
|
||
|
||
/// <summary>
|
||
/// 系统初始化
|
||
/// </summary>
|
||
protected override void OnInit()
|
||
{
|
||
EcsWorld = Context.GetService<EcsWorld>() ?? throw new InvalidOperationException(
|
||
"EcsWorld not found in context. Make sure ECS is properly initialized.");
|
||
|
||
OnEcsInit();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 系统销毁
|
||
/// </summary>
|
||
protected override void OnDestroy()
|
||
{
|
||
OnEcsDestroy();
|
||
}
|
||
|
||
/// <summary>
|
||
/// ECS系统初始化(子类实现)
|
||
/// </summary>
|
||
protected abstract void OnEcsInit();
|
||
|
||
/// <summary>
|
||
/// ECS系统销毁(子类可选实现)
|
||
/// </summary>
|
||
protected virtual void OnEcsDestroy()
|
||
{
|
||
}
|
||
} |