Implement transform and camera system into scene
This commit is contained in:
@@ -2,20 +2,53 @@
|
|||||||
#include "inferno/scene/components.h"
|
#include "inferno/scene/components.h"
|
||||||
#include "inferno/scene/entity.h"
|
#include "inferno/scene/entity.h"
|
||||||
#include "inferno/scene/scene.h"
|
#include "inferno/scene/scene.h"
|
||||||
|
#include "inferno/systems/camera.h"
|
||||||
|
#include "inferno/systems/transform.h"
|
||||||
|
|
||||||
namespace Inferno {
|
namespace Inferno {
|
||||||
|
|
||||||
Scene::Scene()
|
Scene::Scene()
|
||||||
|
{
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
Scene::~Scene()
|
||||||
|
{
|
||||||
|
destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Scene::initialize()
|
||||||
{
|
{
|
||||||
m_registry = std::make_shared<entt::registry>();
|
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) {
|
Entity camera = createEntity("Camera Entity");
|
||||||
dbg() << "Entity is valid";
|
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)
|
Entity Scene::createEntity(const std::string& name)
|
||||||
@@ -37,4 +70,15 @@ namespace Inferno {
|
|||||||
return Entity(m_registry, handle);
|
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 };
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,20 +5,29 @@
|
|||||||
#include <memory> // std::shared_ptr
|
#include <memory> // std::shared_ptr
|
||||||
|
|
||||||
#include "entt/entity/registry.hpp" // entt::entity, entt::registry
|
#include "entt/entity/registry.hpp" // entt::entity, entt::registry
|
||||||
|
#include "glm/ext/matrix_float4x4.hpp" // glm::mat4
|
||||||
|
|
||||||
namespace Inferno {
|
namespace Inferno {
|
||||||
|
|
||||||
|
class Camera;
|
||||||
class Entity;
|
class Entity;
|
||||||
|
|
||||||
class Scene {
|
class Scene {
|
||||||
public:
|
public:
|
||||||
Scene();
|
Scene();
|
||||||
virtual ~Scene() = default;
|
virtual ~Scene();
|
||||||
|
|
||||||
|
void initialize();
|
||||||
|
void update(float deltaTime);
|
||||||
|
void render();
|
||||||
|
void destroy();
|
||||||
|
|
||||||
Entity createEntity(const std::string& name = "");
|
Entity createEntity(const std::string& name = "");
|
||||||
Entity createEntity(entt::entity handle);
|
Entity createEntity(entt::entity handle);
|
||||||
Entity createEntity(uint32_t handle);
|
Entity createEntity(uint32_t handle);
|
||||||
|
|
||||||
|
glm::mat4 cameraProjectionView();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<entt::registry> m_registry;
|
std::shared_ptr<entt::registry> m_registry;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user