using Arch.Core;
using GFramework.Core.ecs.components;
namespace GFramework.Core.ecs.systems;
///
/// 移动系统,负责更新具有位置和速度组件的实体的位置。
/// 根据速度和时间增量计算实体的新位置。
///
public class MovementSystem : EcsSystemBase
{
private QueryDescription _query;
///
/// 获取系统的优先级,数值越小优先级越高。
///
public override int Priority => 0;
///
/// ECS初始化回调方法,在系统初始化时调用。
/// 创建查询描述符,用于查找同时拥有Position和Velocity组件的实体。
///
protected override void OnEcsInit()
{
// 创建查询:查找所有同时拥有Position和Velocity组件的实体
_query = new QueryDescription()
.WithAll();
}
///
/// 系统更新方法,每帧调用一次。
///
/// 帧间隔时间,用于计算位置变化量
public override void Update(float deltaTime)
{
// 查询并更新所有符合条件的实体
World.Query(in _query, (ref Position pos, ref Velocity vel) =>
{
pos.X += vel.X * deltaTime;
pos.Y += vel.Y * deltaTime;
});
}
}