10#include "mathtypes.hpp"
11#include "ComponentHandle.hpp"
12#include "Queryable.hpp"
13#include "Common3D.hpp"
15#include "DataStructures.hpp"
16#include "ComponentWithOwner.hpp"
27 mutable bool isDirty : 1 =
true;
28 mutable bool isTickDirty : 1 =
true;
32 static_assert(
sizeof(matrix) >=
sizeof(children),
"Invalid struct order");
33 static_assert(
sizeof(children) >=
sizeof(rotation),
"Invalid struct order");
34 static_assert(
sizeof(rotation) >=
sizeof(position),
"Invalid struct order");
35 static_assert(
sizeof(parent) >=
sizeof(position),
"Invalid struct order");
40 inline void MarkAsDirty()
const{
45 inline void ClearTickDirty() {
49 inline void UpdateChildren()
52 if (children.size() > 0) [[unlikely]] {
54 transform->MarkAsDirty();
56 for (
auto& child : transform->children) {
57 auto component = child.get();
68 inline bool getTickDirty()
const{
77 Transform(
Entity owner) :
Transform(owner,
vector3(0, 0, 0),
quaternion(1.0, 0.0, 0.0, 0.0),
vector3(1, 1, 1)) {}
103 inline bool HasParent()
const{
104 return parent.IsValid();
107 vector3 GetLocalPosition()
const;
108 vector3 GetWorldPosition()
const;
127 matrix4 GetParentSpaceMatrix()
const {
135 Transform&
AddChild(ComponentHandle<Transform> child);
141 Transform&
RemoveChild(ComponentHandle<Transform> child);
143 const decltype(children)& GetChildren()
const{
149 for(
auto& child : children){
150 child.GetOwner().Destroy();
167 return (
quaternion)rotation * vector3_forward;
184 inline vector3 Transform::WorldForward()
const{
185 return GetWorldRotation() * vector3_forward;
188 inline vector3 Transform::WorldRight()
const{
189 return GetWorldRotation() * vector3_right;
192 inline vector3 Transform::WorldUp()
const{
193 return GetWorldRotation() * vector3_up;
233 auto worldpos = GetWorldPosition();
298 inline vector3 Transform::GetLocalPosition()
const
303 inline quaternion Transform::GetLocalRotation()
const
308 inline vector3 Transform::GetLocalScale()
const
322 inline vector3 Transform::GetWorldPosition()
const
325 return GetLocalPosition();
328 return GetParentSpaceMatrix() *
vector4(GetLocalPosition(),1);
331 inline quaternion Transform::GetWorldRotation()
const
334 return GetLocalRotation();
337 auto finalMatrix = GetParentSpaceMatrix() *
glm::toMat4(GetLocalRotation());
Definition ComponentWithOwner.hpp:6
Definition concurrentqueue.h:747
GLM_FUNC_QUALIFIER mat< C, R, T, Q > inverse(mat< C, R, T, Q > const &m)
Definition func_matrix.inl:388
GLM_FUNC_DECL qua< T, Q > quat_cast(mat< 3, 3, T, Q > const &x)
Definition quaternion.inl:75
GLM_FUNC_DECL mat< 4, 4, T, Q > toMat4(qua< T, Q > const &x)
Definition quaternion.hpp:120
GLM_FUNC_DECL qua< T, Q > rotation(vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dest)
Definition quaternion.inl:122
Definition Animation.hpp:6
Definition Queryable.hpp:21
Definition qualifier.hpp:36
Definition type_quat.hpp:20
Definition qualifier.hpp:35