如何自定义
基于实体组件系统,Alice 还允许使用完全非侵入式的方法为框架添加新功能。
组件即是一个结构体,仅包含数据。所以自定义组件非常简单。
自定义的系统则需要继承自 System 基类,以便重写必要的方法, 否则将无法对自定义系统进行注册。
以下是一个简单的示例,展示编写一个给予实体向上移动功能的组件和系统的全流程。 UpSys 继承自 System,并且重写了 OnUpdate 方法, 让实体的位置每次都在坐标轴上减去 UpComp 组件提供的速度,以实现物体的上升。
struct UpComp
{
float speed;
};
class UpSys : System
{
void Before()
{
ALICE_INFO("Before...");
}
void OnUpdate()
{
UpComp& up_comp = world->GetComp<UpComp>();
Transform& tran_comp = world->GetComp<TransformComp>();
tran_comp.position.y -= up_comp.speed;
}
void After()
{
ALICE_INFO("After...");
}
};
// 使用临时实体绑定对应组件以获取签名
Entity up_entity = m_world->CreateEntity();
m_world->AtachComp<TransformComp>(up_entity, TransformComp{});
m_world->AtachComp<UpComp>(up_entity, UpComp{});
// 使用实体注册系统
m_world->RegisterSys<TextureRenderSys>(up_entity);
// 移除临时实体
m_world->DestroyEntity(up_entity);