#include "TransformSystem.h" #include "src/Core/Maths.h" #include "src/Scene/Scene.h" #include #include #include namespace Nuake { TransformSystem::TransformSystem(Scene* scene) { m_Scene = scene; } bool TransformSystem::Init() { UpdateTransform(); return true; } void TransformSystem::Update(Timestep ts) { UpdateTransform(); } void TransformSystem::FixedUpdate(Timestep ts) { } void TransformSystem::Exit() { } void TransformSystem::UpdateTransform() { auto camView = m_Scene->m_Registry.view(); for (auto e : camView) { auto [transform, camera] = camView.get(e); Matrix4 cameraTransform = camera.CameraInstance->GetTransformRotation(); } auto transformView = m_Scene->m_Registry.view(); for (auto e : transformView) { auto [parent, transform] = transformView.get(e); Entity currentParent = Entity((entt::entity)e, m_Scene); Vector3 globalPosition = Vector3(); Vector3 globalRotation = Vector3(); Vector3 globalScale = Vector3(); if (parent.HasParent) { ParentComponent parentComponent = currentParent.GetComponent(); while (parentComponent.HasParent) { TransformComponent& transformComponent = parentComponent.Parent.GetComponent(); globalPosition += transformComponent.Translation; globalRotation += transformComponent.Rotation; globalScale *= transformComponent.Scale; parentComponent = parentComponent.Parent.GetComponent(); } transform.GlobalTranslation = globalPosition + transform.Translation; transform.GlobalRotation = globalRotation + transform.Rotation; transform.GlobalScale = globalScale * transform.Scale; } else { transform.GlobalTranslation = transform.Translation; transform.GlobalRotation = transform.Rotation; transform.Scale = transform.Scale; } } } }