MCPcopy Create free account
hub / github.com/Illation/ETEngine / Process

Method Process

Engine/source/EtFramework/Systems/TransformSystem.cpp:61–106  ·  view source on GitHub ↗

----------------------------------- TransformSystem::Compute::Process Update transforms

Source from the content-addressed store, hash-verified

59// Update transforms
60//
61void TransformSystem::Compute::Process(ComponentRange<TransformSystem::ComputeView>& range)
62{
63 render::Scene& renderScene = UnifiedScene::Instance().GetRenderScene();
64
65 for (ComputeView& view : range)
66 {
67 // if neither this component nor the parent component has an updated transform, we don't need to recalculate anything
68 if (!view.transf->HasTransformChanged() && (!view.parent.IsValid() || !view.parent->HasTransformChanged()))
69 {
70 continue;
71 }
72
73 // this is the local matrix
74 view.transf->m_WorldTransform = math::scale(view.transf->m_Scale)
75 * math::rotate(view.transf->m_Rotation)
76 * math::translate(view.transf->m_Position);
77
78 if (view.parent.IsValid())
79 {
80 // transform based on parent matrix
81 view.transf->m_WorldTransform = view.transf->m_WorldTransform * view.parent->m_WorldTransform;
82
83 // update world variables
84 view.transf->m_WorldPosition = (view.parent->m_WorldTransform * vec4(view.transf->m_Position, 0)).xyz;
85 view.transf->m_WorldRotation = view.parent->GetWorldRotation() * view.transf->m_WorldRotation;
86 view.transf->m_WorldScale = view.parent->GetWorldScale() * view.transf->m_Scale;
87 }
88 else
89 {
90 view.transf->m_WorldPosition = view.transf->m_Position;
91 view.transf->m_WorldRotation = view.transf->m_Rotation;
92 view.transf->m_WorldScale = view.transf->m_Scale;
93 }
94
95 // orientation helpers
96 view.transf->m_Forward = view.transf->m_WorldRotation * vec3::FORWARD;
97 view.transf->m_Right = view.transf->m_WorldRotation * vec3::RIGHT;
98 view.transf->m_Up = math::cross(view.transf->m_Forward, view.transf->m_Right);
99
100 // update in the rendering scene
101 renderScene.UpdateNode(view.transf->m_NodeId, view.transf->m_WorldTransform);
102
103 // since we changed our transform we need to set the transform changed flags so that the change trickles down to children
104 view.transf->m_TransformChanged = TransformComponent::E_TransformChanged::All;
105 }
106}
107
108//---------------------------------
109// TransformSystem::Reset::Process

Callers

nothing calls this directly

Calls 3

HasTransformChangedMethod · 0.80
IsValidMethod · 0.80
UpdateNodeMethod · 0.80

Tested by

no test coverage detected