Быстрое начало работы с ECS

Создание первой сцены

 1#include <prism/scene.h>
 2
 3// 1. Создаем сцену
 4prism::scene::Scene scene;
 5
 6// 2. Создаем сущность игрока
 7auto player = scene.createEntity();
 8
 9// 3. Добавляем компоненты
10scene.addComponent(player, Transform{0, 0, 0});
11scene.addComponent(player, Renderable{"player.obj"});
12scene.addComponent(player, Health{100});

Добавляем стандартный ресурс TimeResource и его систему TimeSystem

scene.setResource<TimeResource>(TimeResource{});
scene.registerSystem<TimeSystem>(&scene);

Создание системы

class MovementSystem : public prism::scene::ISystem {
public:
    void update() override {
                     // getEntitiesWith возвращает ссылку на вектор (копирования нет)
         auto entities = scene->getEntitiesWith<Transform, Velocity>();
         for (auto entity : entities) {
             auto* transform = scene->getComponent<Transform>(entity);
             auto* velocity = scene->getComponent<Velocity>(entity);
             transform->position.x += velocity->x * scene->getResource<TimeResource>()->deltaTime;
        }
    }
};

// Регистрируем систему
scene.registerSystem<MovementSystem>();

Обновление сцены

void gameLoop() {
    while (running) {
        scene.update();
    }
}