Update TransformComponent
- TransformComponent now holds translation, rotation and scale instead of transform
This commit is contained in:
parent
0e31de13b9
commit
0f9a8ff95e
5 changed files with 36 additions and 18 deletions
|
@ -3,23 +3,40 @@
|
|||
#include "Base/Base.h"
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
|
||||
namespace Light {
|
||||
|
||||
struct TransformComponent
|
||||
{
|
||||
glm::mat4 transform;
|
||||
glm::vec3 translation;
|
||||
glm::vec3 scale;
|
||||
glm::vec3 rotation;
|
||||
|
||||
TransformComponent() = default;
|
||||
TransformComponent(const TransformComponent&) = default;
|
||||
|
||||
TransformComponent(const glm::mat4& _transform)
|
||||
: transform(_transform)
|
||||
TransformComponent(const glm::vec3& _translation = glm::vec3(0.0f, 0.0f, 0.0f),
|
||||
const glm::vec3& _scale = glm::vec3(1.0f, 1.0f, 1.0f),
|
||||
const glm::vec3& _rotation = glm::vec3(0.0f, 0.0f, 0.0f))
|
||||
|
||||
: translation(_translation),
|
||||
scale(_scale),
|
||||
rotation(_rotation)
|
||||
{
|
||||
}
|
||||
|
||||
operator glm::mat4&() { return transform; }
|
||||
operator const glm::mat4& () const { return transform; }
|
||||
const glm::mat4& GetTransform() const
|
||||
{
|
||||
return glm::translate(glm::mat4(1.0f), translation) *
|
||||
|
||||
glm::rotate(glm::mat4(1.0f), rotation.x, glm::vec3(1.0f, 0.0f, 0.0f)) *
|
||||
glm::rotate(glm::mat4(1.0f), rotation.y, glm::vec3(0.0f, 1.0f, 0.0f)) *
|
||||
glm::rotate(glm::mat4(1.0f), rotation.z, glm::vec3(0.0f, 0.0f, 1.0f)) *
|
||||
|
||||
glm::scale(glm::mat4(1.0f), scale);
|
||||
}
|
||||
|
||||
operator const glm::mat4& () const { return GetTransform(); }
|
||||
};
|
||||
|
||||
}
|
|
@ -50,7 +50,7 @@ namespace Light {
|
|||
void Scene::OnRender(const Ref<Framebuffer>& targetFrameBuffer /* = nullptr */)
|
||||
{
|
||||
Camera* sceneCamera = nullptr;
|
||||
glm::mat4* sceneCameraTransform;
|
||||
TransformComponent* sceneCameraTransform;
|
||||
|
||||
/* scene camera */
|
||||
{
|
||||
|
@ -61,7 +61,7 @@ namespace Light {
|
|||
if (cameraComp.isPrimary)
|
||||
{
|
||||
sceneCamera = &cameraComp.camera;
|
||||
sceneCameraTransform = &transformComp.transform;
|
||||
sceneCameraTransform = &transformComp;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ namespace Light {
|
|||
m_Registry.group(entt::get<TransformComponent, SpriteRendererComponent>).
|
||||
each([](TransformComponent& transformComp, SpriteRendererComponent& spriteRendererComp)
|
||||
{
|
||||
Renderer::DrawQuad(transformComp.transform, spriteRendererComp.tint, spriteRendererComp.texture);
|
||||
Renderer::DrawQuad(transformComp, spriteRendererComp.tint, spriteRendererComp.texture);
|
||||
});
|
||||
|
||||
Renderer::EndScene();
|
||||
|
@ -83,7 +83,7 @@ namespace Light {
|
|||
}
|
||||
}
|
||||
|
||||
Entity Scene::CreateEntity(const std::string& name, const glm::mat4& transform)
|
||||
Entity Scene::CreateEntity(const std::string& name, const TransformComponent& transform)
|
||||
{
|
||||
Entity entity { m_Registry.create(), this } ;
|
||||
entity.AddComponent<TransformComponent>(transform);
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
#include "Base/Base.h"
|
||||
|
||||
#include "Components/TransformComponent.h"
|
||||
|
||||
#include <entt.hpp>
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
|
@ -28,7 +30,7 @@ namespace Light {
|
|||
void OnUpdate(float deltaTime);
|
||||
void OnRender(const Ref<Framebuffer>& targetFrameBuffer = nullptr);
|
||||
|
||||
Entity CreateEntity(const std::string& name, const glm::mat4& transform);
|
||||
Entity CreateEntity(const std::string& name, const TransformComponent& transform = TransformComponent());
|
||||
};
|
||||
|
||||
}
|
|
@ -41,18 +41,17 @@ namespace Light {
|
|||
glm::vec3 position = glm::vec3(rand() % 3000 - 1400.0f, rand() % 3000 - 1400.0f, 0.0f);
|
||||
glm::vec2 size = glm::vec2(250.0f, 250.0f);
|
||||
|
||||
Entity quad = m_Scene->CreateEntity("quad", glm::translate(glm::mat4(1.0f), { position.x, position.y, 0.0f }) *
|
||||
glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f}));
|
||||
Entity quad = m_Scene->CreateEntity("quad", TransformComponent(glm::vec3(position.x, position.y, 0.0f), glm::vec3(size.x, size.y, 1.0f)));
|
||||
quad.AddComponent<SpriteRendererComponent>(m_AwesomefaceTexture);
|
||||
quad.AddComponent<TagComponent>("quad");
|
||||
|
||||
}
|
||||
|
||||
m_CameraEntity = m_Scene->CreateEntity("camera", glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, 1000.0f)));
|
||||
m_CameraEntity = m_Scene->CreateEntity("camera", TransformComponent(glm::vec3(0.0f, 0.0f, 1000.0f)));
|
||||
m_CameraEntity.AddComponent<CameraComponent>(SceneCamera(), true);
|
||||
m_CameraEntity.AddComponent<TagComponent>("Camera");
|
||||
|
||||
m_NativeScriptEntity = m_Scene->CreateEntity("nsc", glm::translate(glm::mat4(1.0f), glm::vec3(0.0f)) * glm::scale(glm::mat4(1.0f), glm::vec3(250.0f, 250.0f, 1.0f)));
|
||||
m_NativeScriptEntity = m_Scene->CreateEntity("nsc");
|
||||
m_NativeScriptEntity.AddComponent<SpriteRendererComponent>(m_AwesomefaceTexture);
|
||||
m_NativeScriptEntity.AddComponent<TagComponent>("NativeScript");
|
||||
|
||||
|
@ -90,7 +89,7 @@ namespace Light {
|
|||
m_Direction.y = 0.0f;
|
||||
|
||||
auto& transform = m_CameraEntity.GetComponent<TransformComponent>();
|
||||
transform = glm::translate(transform.transform, glm::vec3(m_Direction * m_Speed * deltaTime, 0.0));
|
||||
transform.translation += glm::vec3(m_Direction * m_Speed * deltaTime, 0.0);
|
||||
|
||||
m_Scene->OnUpdate(deltaTime);
|
||||
}
|
||||
|
|
|
@ -35,8 +35,8 @@ namespace Light {
|
|||
|
||||
if (ImGui::TreeNodeEx((void*)typeid(TransformComponent).hash_code(), ImGuiTreeNodeFlags_DefaultOpen, "Transform"))
|
||||
{
|
||||
auto& transformComponent = m_EntityContext.GetComponent<TransformComponent>();
|
||||
ImGui::DragFloat3("Position", glm::value_ptr(transformComponent.transform[3]), 0.5f);
|
||||
auto transform = m_EntityContext.GetComponent<TransformComponent>().GetTransform();
|
||||
ImGui::DragFloat3("Position", glm::value_ptr(transform[3]), 0.5f);
|
||||
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue