#include "scene.hpp" #include "components/transform.hpp" #include "components/renderable.hpp" #include "components/collider.hpp" #include "systems/transform.hpp" #include "systems/render.hpp" #include "systems/physics.hpp" namespace engine { Scene::Scene(Application* app) : m_app(app) { registerComponent(); registerComponent(); registerComponent(); // Order here matters: registerSystem(); registerSystem(); registerSystem(); } Scene::~Scene() {} uint32_t Scene::createEntity(const std::string& tag, uint32_t parent) { uint32_t id = m_nextEntityID++; m_signatures.emplace(id, std::bitset{}); auto t = addComponent(id); t->position = {0.0f, 0.0f, 0.0f}; t->rotation = {}; t->scale = {1.0f, 1.0f, 1.0f}; t->tag = tag; t->parent = parent; return id; } uint32_t Scene::getEntity(const std::string& tag, uint32_t parent) { return getSystem()->getChildEntity(parent, tag); } size_t Scene::getComponentSignaturePosition(size_t hash) { return m_componentSignaturePositions.at(hash); } void Scene::update(float ts) { for (auto& [name, system] : m_systems) { system->onUpdate(ts); } } }