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 "Base/Base.h"
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
|
||||||
namespace Light {
|
namespace Light {
|
||||||
|
|
||||||
struct TransformComponent
|
struct TransformComponent
|
||||||
{
|
{
|
||||||
glm::mat4 transform;
|
glm::vec3 translation;
|
||||||
|
glm::vec3 scale;
|
||||||
|
glm::vec3 rotation;
|
||||||
|
|
||||||
TransformComponent() = default;
|
|
||||||
TransformComponent(const TransformComponent&) = default;
|
TransformComponent(const TransformComponent&) = default;
|
||||||
|
|
||||||
TransformComponent(const glm::mat4& _transform)
|
TransformComponent(const glm::vec3& _translation = glm::vec3(0.0f, 0.0f, 0.0f),
|
||||||
: transform(_transform)
|
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; }
|
const glm::mat4& GetTransform() const
|
||||||
operator const glm::mat4& () const { return transform; }
|
{
|
||||||
|
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 */)
|
void Scene::OnRender(const Ref<Framebuffer>& targetFrameBuffer /* = nullptr */)
|
||||||
{
|
{
|
||||||
Camera* sceneCamera = nullptr;
|
Camera* sceneCamera = nullptr;
|
||||||
glm::mat4* sceneCameraTransform;
|
TransformComponent* sceneCameraTransform;
|
||||||
|
|
||||||
/* scene camera */
|
/* scene camera */
|
||||||
{
|
{
|
||||||
|
@ -61,7 +61,7 @@ namespace Light {
|
||||||
if (cameraComp.isPrimary)
|
if (cameraComp.isPrimary)
|
||||||
{
|
{
|
||||||
sceneCamera = &cameraComp.camera;
|
sceneCamera = &cameraComp.camera;
|
||||||
sceneCameraTransform = &transformComp.transform;
|
sceneCameraTransform = &transformComp;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ namespace Light {
|
||||||
m_Registry.group(entt::get<TransformComponent, SpriteRendererComponent>).
|
m_Registry.group(entt::get<TransformComponent, SpriteRendererComponent>).
|
||||||
each([](TransformComponent& transformComp, SpriteRendererComponent& spriteRendererComp)
|
each([](TransformComponent& transformComp, SpriteRendererComponent& spriteRendererComp)
|
||||||
{
|
{
|
||||||
Renderer::DrawQuad(transformComp.transform, spriteRendererComp.tint, spriteRendererComp.texture);
|
Renderer::DrawQuad(transformComp, spriteRendererComp.tint, spriteRendererComp.texture);
|
||||||
});
|
});
|
||||||
|
|
||||||
Renderer::EndScene();
|
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 entity { m_Registry.create(), this } ;
|
||||||
entity.AddComponent<TransformComponent>(transform);
|
entity.AddComponent<TransformComponent>(transform);
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include "Base/Base.h"
|
#include "Base/Base.h"
|
||||||
|
|
||||||
|
#include "Components/TransformComponent.h"
|
||||||
|
|
||||||
#include <entt.hpp>
|
#include <entt.hpp>
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
@ -28,7 +30,7 @@ namespace Light {
|
||||||
void OnUpdate(float deltaTime);
|
void OnUpdate(float deltaTime);
|
||||||
void OnRender(const Ref<Framebuffer>& targetFrameBuffer = nullptr);
|
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::vec3 position = glm::vec3(rand() % 3000 - 1400.0f, rand() % 3000 - 1400.0f, 0.0f);
|
||||||
glm::vec2 size = glm::vec2(250.0f, 250.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 }) *
|
Entity quad = m_Scene->CreateEntity("quad", TransformComponent(glm::vec3(position.x, position.y, 0.0f), glm::vec3(size.x, size.y, 1.0f)));
|
||||||
glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f}));
|
|
||||||
quad.AddComponent<SpriteRendererComponent>(m_AwesomefaceTexture);
|
quad.AddComponent<SpriteRendererComponent>(m_AwesomefaceTexture);
|
||||||
quad.AddComponent<TagComponent>("quad");
|
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<CameraComponent>(SceneCamera(), true);
|
||||||
m_CameraEntity.AddComponent<TagComponent>("Camera");
|
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<SpriteRendererComponent>(m_AwesomefaceTexture);
|
||||||
m_NativeScriptEntity.AddComponent<TagComponent>("NativeScript");
|
m_NativeScriptEntity.AddComponent<TagComponent>("NativeScript");
|
||||||
|
|
||||||
|
@ -90,7 +89,7 @@ namespace Light {
|
||||||
m_Direction.y = 0.0f;
|
m_Direction.y = 0.0f;
|
||||||
|
|
||||||
auto& transform = m_CameraEntity.GetComponent<TransformComponent>();
|
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);
|
m_Scene->OnUpdate(deltaTime);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,8 +35,8 @@ namespace Light {
|
||||||
|
|
||||||
if (ImGui::TreeNodeEx((void*)typeid(TransformComponent).hash_code(), ImGuiTreeNodeFlags_DefaultOpen, "Transform"))
|
if (ImGui::TreeNodeEx((void*)typeid(TransformComponent).hash_code(), ImGuiTreeNodeFlags_DefaultOpen, "Transform"))
|
||||||
{
|
{
|
||||||
auto& transformComponent = m_EntityContext.GetComponent<TransformComponent>();
|
auto transform = m_EntityContext.GetComponent<TransformComponent>().GetTransform();
|
||||||
ImGui::DragFloat3("Position", glm::value_ptr(transformComponent.transform[3]), 0.5f);
|
ImGui::DragFloat3("Position", glm::value_ptr(transform[3]), 0.5f);
|
||||||
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue