+
+ void updateTransform()
+ {
+ m_transform.localToParent() = g_matrix4_identity;
+ matrix4_translate_by_vec3(m_transform.localToParent(), m_origin);
+ m_transformChanged();
+ }
+ typedef MemberCaller<Group, &Group::updateTransform> UpdateTransformCaller;
+ void originChanged()
+ {
+ m_origin = m_originKey.m_origin;
+ updateTransform();
+ }
+ typedef MemberCaller<Group, &Group::originChanged> OriginChangedCaller;
+
+ void translate(const Vector3& translation)
+ {
+ m_origin = origin_translated(m_origin, translation);
+ }
+
+ void revertTransform()
+ {
+ m_origin = m_originKey.m_origin;
+ }
+ void freezeTransform()
+ {
+ m_originKey.m_origin = m_origin;
+ m_originKey.write(&m_entity);
+ }
+ void transformChanged()
+ {
+ revertTransform();
+ m_evaluateTransform();
+ updateTransform();
+ }
+ typedef MemberCaller<Group, &Group::transformChanged> TransformChangedCaller;