如何自定义

基于实体组件系统,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);