You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.8 KiB
111 lines
2.8 KiB
#include "inferno/log.h" |
|
#include "inferno/scene/components.h" |
|
#include "inferno/scene/entity.h" |
|
#include "inferno/scene/scene.h" |
|
#include "inferno/systems/camera.h" |
|
#include "inferno/systems/render.h" |
|
#include "inferno/systems/transform.h" |
|
|
|
namespace Inferno { |
|
|
|
void Scene::initialize() |
|
{ |
|
// Initialize |
|
// --------------------------------- |
|
|
|
m_registry = std::make_shared<entt::registry>(); |
|
|
|
TransformSystem* transformSystem = new TransformSystem(); |
|
transformSystem->initialize(); |
|
TransformSystem::the().setRegistry(m_registry); |
|
|
|
CameraSystem* cameraSystem = new CameraSystem(); |
|
cameraSystem->initialize(); |
|
CameraSystem::the().setRegistry(m_registry); |
|
|
|
Entity camera = createEntity("Camera Entity"); |
|
camera.add<PerspectiveCameraComponent>(); |
|
auto& cameraTransform = camera.get<TransformComponent>(); |
|
cameraTransform.translate.z = 1.0f; |
|
cameraTransform.rotate.z = -1.0f; |
|
|
|
RenderSystem* renderSystem = new RenderSystem(); |
|
renderSystem->initialize(); |
|
RenderSystem::the().setRegistry(m_registry); |
|
|
|
// Load assets |
|
// --------------------------------- |
|
|
|
m_texture = TextureManager::the().load("assets/gfx/test.png"); |
|
m_texture2 = TextureManager::the().load("assets/gfx/test-inverted.png"); |
|
|
|
// Construct entities |
|
// --------------------------------- |
|
|
|
Entity quad = createEntity("Quad"); |
|
quad.add<SpriteComponent>(glm::vec4 { 1.0f, 1.0f, 1.0f, 1.0f }, m_texture); |
|
|
|
Entity quad2 = createEntity("Quad 2"); |
|
auto& quad2Transform = quad2.get<TransformComponent>(); |
|
quad2Transform.translate.x = 1.1f; |
|
quad2.add<SpriteComponent>(glm::vec4 { 0.5f, 0.6f, 0.8f, 1.0f }, m_texture); |
|
|
|
Entity quad3 = createEntity("Quad 3"); |
|
auto& quad3Transform = quad3.get<TransformComponent>(); |
|
quad3Transform.translate.x = 2.2f; |
|
quad3.add<SpriteComponent>(glm::vec4 { 1.0f, 1.0f, 1.0f, 1.0f }, m_texture2); |
|
|
|
dbg(Log::Info) << "Scene initialized"; |
|
} |
|
|
|
void Scene::update(float deltaTime) |
|
{ |
|
(void)deltaTime; |
|
|
|
TransformSystem::the().update(); |
|
CameraSystem::the().update(); |
|
} |
|
|
|
void Scene::render() |
|
{ |
|
RenderSystem::the().render(); |
|
} |
|
|
|
void Scene::destroy() |
|
{ |
|
RenderSystem::the().destroy(); |
|
CameraSystem::the().destroy(); |
|
TransformSystem::the().destroy(); |
|
} |
|
|
|
Entity Scene::createEntity(const std::string& name) |
|
{ |
|
Entity entity = Entity(m_registry); |
|
entity.add<TagComponent>(name.empty() ? "Unnamed Entity" : name); |
|
entity.add<TransformComponent>(); |
|
|
|
return entity; |
|
} |
|
|
|
Entity Scene::createEntity(entt::entity handle) |
|
{ |
|
return Entity(m_registry, handle); |
|
} |
|
|
|
Entity Scene::createEntity(uint32_t 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 }; |
|
} |
|
|
|
}
|
|
|