Files
Nuake-custom/Nuake/src/Scene/Components/TransformComponent.h

112 lines
2.6 KiB
C++

#pragma once
#include "src/Core/Maths.h"
#include "src/Resource/Serializable.h"
namespace Nuake
{
class TransformComponent {
public:
Vector3 Translation;
Quat Rotation;
Vector3 Scale;
Vector3 GlobalTranslation;
Quat GlobalRotation;
Vector3 GlobalScale;
Matrix4 LocalTransform;
Matrix4 GlobalTransform;
public:
bool Dirty = true;
TransformComponent();
Matrix4 GetGlobalTransform() const;
void SetGlobalTransform(const Matrix4& transform);
Matrix4 GetLocalTransform() const;
void SetLocalTransform(const Matrix4& transform);
void SetLocalRotation(const Quat& quat);
Quat GetLocalRotation() const;
void SetGlobalRotation(const Quat& quat);
Quat GetGlobalRotation() const;
Vector3 GetLocalPosition() const;
void SetLocalPosition(const Vector3& position);
Vector3 GetGlobalPosition() const;
void SetGlobalPosition(const Vector3& position);
void SetLocalScale(const Vector3& scale);
Vector3 GetLocalScale() const;
void SetGlobalScale(const Vector3& scale);
Vector3 GetGlobalScale() const;
json Serialize()
{
BEGIN_SERIALIZE();
SERIALIZE_VAL_LBL("Type", "TransformComponent");
SERIALIZE_VEC3(Translation);
SERIALIZE_VEC3(GlobalTranslation);
SERIALIZE_VEC4(Rotation);
SERIALIZE_VEC4(GlobalRotation);
SERIALIZE_VEC3(GlobalScale);
SERIALIZE_VEC3(Scale);
END_SERIALIZE();
}
bool Deserialize(std::string str)
{
BEGIN_DESERIALIZE();
this->Translation = Vector3(j["Translation"]["x"], j["Translation"]["y"], j["Translation"]["z"]);
if (j.contains("GlobalTranslation"))
{
float x = j["GlobalTranslation"]["x"];
float y = j["GlobalTranslation"]["y"];
float z = j["GlobalTranslation"]["z"];
this->GlobalTranslation = Vector3(x, y, z);
}
if (j.contains("Rotation"))
{
float w = j["Rotation"]["w"];
float x = j["Rotation"]["x"];
float y = j["Rotation"]["y"];
float z = j["Rotation"]["z"];
this->Rotation = Quat(w, x, y, z);
}
if (j.contains("GlobalRotation"))
{
float w = j["GlobalRotation"]["w"];
float x = j["GlobalRotation"]["x"];
float y = j["GlobalRotation"]["y"];
float z = j["GlobalRotation"]["z"];
this->GlobalRotation = Quat(w, x, y, z);
}
if (j.contains("GlobalScale"))
{
float x = j["GlobalScale"]["x"];
float y = j["GlobalScale"]["y"];
float z = j["GlobalScale"]["z"];
this->GlobalScale = Vector3(x, y, z);
}
this->Scale = Vector3(j["Scale"]["x"], j["Scale"]["y"], j["Scale"]["z"]);
LocalTransform = Matrix4(1);
GlobalTransform = Matrix4(1);
this->Dirty = true;
return true;
}
};
}