diff --git a/inferno/src/inferno/scene/scene.cpp b/inferno/src/inferno/scene/scene.cpp index f821c65..93d5775 100644 --- a/inferno/src/inferno/scene/scene.cpp +++ b/inferno/src/inferno/scene/scene.cpp @@ -2,20 +2,53 @@ #include "inferno/scene/components.h" #include "inferno/scene/entity.h" #include "inferno/scene/scene.h" +#include "inferno/systems/camera.h" +#include "inferno/systems/transform.h" namespace Inferno { Scene::Scene() + { + initialize(); + } + + Scene::~Scene() + { + destroy(); + } + + void Scene::initialize() { m_registry = std::make_shared(); - Entity entity = createEntity("Test Entity"); + TransformSystem* transformSystem = new TransformSystem(); + transformSystem->initialize(); + TransformSystem::the().setRegistry(m_registry); - dbg() << entity.get(); + CameraSystem* cameraSystem = new CameraSystem(); + cameraSystem->initialize(); + CameraSystem::the().setRegistry(m_registry); - if (entity) { - dbg() << "Entity is valid"; - } + Entity camera = createEntity("Camera Entity"); + camera.add(); + auto& cameraTransform = camera.get(); + cameraTransform.translate = { 0.0f, 0.0f, 1.0f }; + cameraTransform.rotate = { 0.0f, 0.0f, -1.0f }; + } + + void Scene::update(float deltaTime) + { + TransformSystem::the().update(); + CameraSystem::the().update(); + } + + void Scene::render() + { + } + + void Scene::destroy() + { + TransformSystem::the().destroy(); } Entity Scene::createEntity(const std::string& name) @@ -37,4 +70,15 @@ namespace Inferno { return Entity(m_registry, handle); } + glm::mat4 Scene::cameraProjectionView() + { + auto view = m_registry->view(); + + for(auto&& [entity, transform, perspective] : view.each()) { + return perspective.projection * transform.transform; + } + + return glm::mat4 { 1.0f }; + } + } diff --git a/inferno/src/inferno/scene/scene.h b/inferno/src/inferno/scene/scene.h index cd4398e..9b53803 100644 --- a/inferno/src/inferno/scene/scene.h +++ b/inferno/src/inferno/scene/scene.h @@ -5,20 +5,29 @@ #include // std::shared_ptr #include "entt/entity/registry.hpp" // entt::entity, entt::registry +#include "glm/ext/matrix_float4x4.hpp" // glm::mat4 namespace Inferno { + class Camera; class Entity; class Scene { public: Scene(); - virtual ~Scene() = default; + virtual ~Scene(); + + void initialize(); + void update(float deltaTime); + void render(); + void destroy(); Entity createEntity(const std::string& name = ""); Entity createEntity(entt::entity handle); Entity createEntity(uint32_t handle); + glm::mat4 cameraProjectionView(); + private: std::shared_ptr m_registry; };