Program Listing for File transform_component.h¶
↰ Return to documentation for file (rootex/framework/components/space/transform_component.h
)
#pragma once
#include "common/common.h"
#include "component.h"
enum class TransformPassDown : int
{
Position = 1 << 0,
Rotation = 1 << 1,
Scale = 1 << 2,
All = Position | Rotation | Scale
};
void to_json(JSON::json& j, const TransformPassDown& t);
void from_json(const JSON::json& j, TransformPassDown& t);
class TransformComponent : public Component
{
COMPONENT(TransformComponent, Category::General);
struct TransformBuffer
{
Vector3 position;
Quaternion rotation;
Vector3 scale;
BoundingBox boundingBox;
Matrix transform;
};
TransformBuffer m_TransformBuffer;
int m_TransformPassDown;
Matrix m_ParentAbsoluteTransform;
Matrix m_AbsoluteTransform;
Vector3 m_AbsolutePosition;
Quaternion m_AbsoluteRotation;
Vector3 m_AbsoluteScale;
bool m_IsAbsoluteTransformDirty = true;
bool m_OverrideBoundingBox;
const TransformBuffer* getTransformBuffer() const { return &m_TransformBuffer; };
void updateAbsoluteTransformValues();
void updateTransformFromPositionRotationScale();
void updatePositionRotationScaleFromTransform(Matrix& transform);
friend class ModelComponent;
friend class RenderSystem;
public:
TransformComponent(Entity& owner, const JSON::json& data);
~TransformComponent() = default;
void setPosition(const Vector3& position);
void setRotation(const float& yaw, const float& pitch, const float& roll);
void setRotationQuaternion(const Quaternion& rotation);
void setScale(const Vector3& scale);
void setLocalTransform(const Matrix& transform);
void setAbsoluteTransform(const Matrix& transform);
void setBounds(const BoundingBox& bounds);
void setRotationPosition(const Matrix& transform);
void setAbsoluteRotationPosition(const Matrix& transform);
void setParentAbsoluteTransform(const Matrix& parentTransform);
void addLocalTransform(const Matrix& applyTransform);
void addQuaternion(const Quaternion& applyQuaternion);
void addRotation(float yaw, float pitch, float roll);
Vector3 getPosition() const { return m_TransformBuffer.position; }
Quaternion getRotation() const { return m_TransformBuffer.rotation; };
const Vector3& getScale() const { return m_TransformBuffer.scale; }
const Matrix& getLocalTransform() const { return m_TransformBuffer.transform; }
Matrix getRotationPosition() const { return Matrix::CreateFromQuaternion(m_TransformBuffer.rotation) * Matrix::CreateTranslation(m_TransformBuffer.position) * m_ParentAbsoluteTransform; }
Matrix getParentAbsoluteTransform() const { return m_ParentAbsoluteTransform; }
int getPassDowns() const { return m_TransformPassDown; }
BoundingBox getWorldSpaceBounds();
Matrix getAbsoluteTransform();
Vector3 getAbsolutePosition();
void setAbsolutePosition(const Vector3& position);
Quaternion getAbsoluteRotation();
Vector3 getAbsoluteScale();
JSON::json getJSON() const override;
void draw() override;
void highlight();
};
DECLARE_COMPONENT(TransformComponent);