Browse Source

Implement transform and camera system into scene

master
Riyyi 3 years ago
parent
commit
c599486ff5
  1. 54
      inferno/src/inferno/scene/scene.cpp
  2. 11
      inferno/src/inferno/scene/scene.h

54
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<entt::registry>();
Entity entity = createEntity("Test Entity");
TransformSystem* transformSystem = new TransformSystem();
transformSystem->initialize();
TransformSystem::the().setRegistry(m_registry);
dbg() << entity.get<TagComponent>();
CameraSystem* cameraSystem = new CameraSystem();
cameraSystem->initialize();
CameraSystem::the().setRegistry(m_registry);
if (entity) {
dbg() << "Entity is valid";
}
Entity camera = createEntity("Camera Entity");
camera.add<PerspectiveCameraComponent>();
auto& cameraTransform = camera.get<TransformComponent>();
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<TransformComponent, PerspectiveCameraComponent>();
for(auto&& [entity, transform, perspective] : view.each()) {
return perspective.projection * transform.transform;
}
return glm::mat4 { 1.0f };
}
}

11
inferno/src/inferno/scene/scene.h

@ -5,20 +5,29 @@
#include <memory> // 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<entt::registry> m_registry;
};

Loading…
Cancel
Save