engine/src/scene.cpp

65 lines
1.3 KiB
C++
Raw Normal View History

2022-11-30 00:46:03 +00:00
#include "scene.hpp"
2023-01-02 17:24:20 +00:00
#include "components/transform.hpp"
#include "components/renderable.hpp"
2023-01-18 14:42:09 +00:00
#include "components/collider.hpp"
2023-01-02 17:24:20 +00:00
#include "systems/transform.hpp"
#include "systems/render.hpp"
#include "systems/collisions.hpp"
2022-12-20 23:51:04 +00:00
2022-11-30 00:46:03 +00:00
namespace engine {
2022-12-20 23:51:04 +00:00
Scene::Scene(Application* app)
: m_app(app)
2022-11-30 00:46:03 +00:00
{
2023-01-02 17:24:20 +00:00
registerComponent<TransformComponent>();
registerComponent<RenderableComponent>();
2023-01-18 14:42:09 +00:00
registerComponent<ColliderComponent>();
// Order here matters:
2023-01-02 17:24:20 +00:00
registerSystem<TransformSystem>();
2023-01-18 14:42:09 +00:00
registerSystem<PhysicsSystem>();
2023-01-02 17:24:20 +00:00
registerSystem<RenderSystem>();
2022-11-30 00:46:03 +00:00
}
2022-11-30 10:36:50 +00:00
Scene::~Scene() {}
2023-01-02 17:24:20 +00:00
uint32_t Scene::createEntity(const std::string& tag, uint32_t parent)
{
uint32_t id = m_nextEntityID++;
m_signatures.emplace(id, std::bitset<MAX_COMPONENTS>{});
auto t = addComponent<TransformComponent>(id);
2023-01-02 21:11:29 +00:00
t->position = {0.0f, 0.0f, 0.0f};
t->rotation = {};
t->scale = {1.0f, 1.0f, 1.0f};
2023-01-02 17:24:20 +00:00
t->tag = tag;
t->parent = parent;
return id;
}
uint32_t Scene::getEntity(const std::string& tag, uint32_t parent)
{
return getSystem<TransformSystem>()->getChildEntity(parent, tag);
}
size_t Scene::getComponentSignaturePosition(size_t hash)
{
return m_componentSignaturePositions.at(hash);
}
2022-12-15 10:07:22 +00:00
void Scene::update(float ts)
{
2022-12-22 11:27:16 +00:00
2023-01-02 17:24:20 +00:00
for (auto& [name, system] : m_systems) {
system->onUpdate(ts);
}
2022-12-15 10:07:22 +00:00
}
2022-12-14 22:50:17 +00:00
}