Optimizations
This commit is contained in:
@@ -60,3 +60,34 @@ glm::vec3 Systems::TransformSystem::AbsoluteScale(EntityID entity)
|
||||
|
||||
return absScale;
|
||||
}
|
||||
|
||||
Components::Transform Systems::TransformSystem::AbsoluteTransform(EntityID entity)
|
||||
{
|
||||
glm::vec3 absPosition;
|
||||
glm::quat absOrientation;
|
||||
glm::vec3 absScale(1);
|
||||
|
||||
do
|
||||
{
|
||||
auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform");
|
||||
entity = m_World->GetEntityParent(entity);
|
||||
auto transform2 = m_World->GetComponent<Components::Transform>(entity, "Transform");
|
||||
|
||||
// Position
|
||||
if (entity != 0)
|
||||
absPosition += transform2->Orientation * transform->Position;
|
||||
else
|
||||
absPosition += transform->Position;
|
||||
// Orientation
|
||||
absOrientation = transform->Orientation * absOrientation;
|
||||
// Scale
|
||||
absScale *= transform->Scale;
|
||||
} while (entity != 0);
|
||||
|
||||
Components::Transform transform;
|
||||
transform.Position = absPosition;
|
||||
transform.Orientation = absOrientation;
|
||||
transform.Scale = absScale;
|
||||
|
||||
return transform;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user