Implement transform and camera system into scene
This commit is contained in:
@@ -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 };
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user