Vivid
Loading...
Searching...
No Matches
TransformComponent.h
1#pragma once
2
3#include "core/ecs/Component.h"
4#include "common/maths/Vec.h"
5#include "imguizmo/ImGuizmo.h"
6
7#include "glm/gtc/quaternion.hpp"
8
9namespace Vivid
10{
11
20 {
21 private:
22 Maths::Vec3 m_Position;
23 Maths::Vec3 m_Rotation;
24 Maths::Vec3 m_Scale;
25 Maths::Vec3 m_PrevScale = Maths::Vec3(50.0f, 50.0f, 50.0f);
26 bool m_FixScale = false;
27 glm::mat4 m_Transform;
28 ImGuizmo::OPERATION m_CurrentGizmoOperation = ImGuizmo::TRANSLATE;
29 ImGuizmo::MODE m_CurrentGizmoMode = ImGuizmo::LOCAL;
30 bool m_UsingSnap = false;
31 float m_Snap[3] = { 1.f, 1.f, 1.f };
32
33 void updateTransformImGUI();
34
35 void drawGizmo(Camera* camera);
36
37 public:
39 {
40 m_Scale = Maths::Vec3(1.0f, 1.0f, 1.0f);
41 m_Position = Maths::Vec3(0.0f, 0.0f, 0.0f);
42 m_Rotation = Maths::Vec3(0.0f, 0.0f, 0.0f);
43 ImGuizmo::RecomposeMatrixFromComponents(&m_Position.x, &m_Rotation.x, &m_Scale.x, &m_Transform[0][0]);
44 }
45 TransformComponent(Maths::Vec3 position, Maths::Vec3 rotation, Maths::Vec3 scale)
46 : m_Position(position)
47 , m_Rotation(rotation)
48 , m_Scale(scale)
49 {
50 ImGuizmo::RecomposeMatrixFromComponents(&m_Position.x, &m_Rotation.x, &m_Scale.x, &m_Transform[0][0]);
51 }
52 virtual ~TransformComponent() = default;
53
54
55 inline Maths::Vec3 GetPosition() const { return m_Position; }
56 inline Maths::Vec3 GetRotation() const { return m_Rotation; }
57 inline Maths::Vec3 GetScale() const { return m_Scale; }
58 inline glm::mat4 GetTransform() { return m_Transform; }
59
60 inline void SetPosition(Maths::Vec3 position)
61 {
62 m_Position = position;
63 ImGuizmo::RecomposeMatrixFromComponents(&m_Position.x, &m_Rotation.x, &m_Scale.x, &m_Transform[0][0]);
64 }
65 inline void SetRotation(Maths::Vec3 rotation)
66 {
67 m_Rotation = rotation;
68 ImGuizmo::RecomposeMatrixFromComponents(&m_Position.x, &m_Rotation.x, &m_Scale.x, &m_Transform[0][0]);
69 }
70 inline void SetScale(Maths::Vec3 scale)
71 {
72 m_Scale = scale;
73 ImGuizmo::RecomposeMatrixFromComponents(&m_Position.x, &m_Rotation.x, &m_Scale.x, &m_Transform[0][0]);
74 }
75
76 ComponentType GetComponentType() override { return ComponentType::TransformComponent; }
77
78 inline ImGuizmo::OPERATION GetCurrentGizmoOperation() const { return m_CurrentGizmoOperation; }
79 inline ImGuizmo::MODE GetCurrentGizmoMode() const { return m_CurrentGizmoMode; }
80 inline bool IsUsingSnap() const { return m_UsingSnap; }
81 inline float* GetSnap() { return m_Snap; }
82
83 void DrawGizmo(Camera* camera);
84 void Draw(Camera* camera) override;
85 void ImGuiRender() override;
86 };
87}
A class that represents the camera.
Definition: Camera.h:25
Contains a Component.
Definition: Component.h:15
Contains the Transform Component.
Contains a 3D vector.
Definition: Vec.h:51