void updateTransform()
{
if( hierarchyDirty != DirtyType.Clean )
{
if( parent != null )
parent.updateTransform();
if( _localDirty )
{
if( _localPositionDirty )
{
Matrix2D.createTranslation( _localPosition.X, _localPosition.Y, out _translationMatrix );
_localPositionDirty = false;
}
if( _localRotationDirty )
{
Matrix2D.createRotation( _localRotation, out _rotationMatrix );
_localRotationDirty = false;
}
if( _localScaleDirty )
{
Matrix2D.createScale( _localScale.X, _localScale.Y, out _scaleMatrix );
_localScaleDirty = false;
}
Matrix2D.multiply( ref _scaleMatrix, ref _rotationMatrix, out _localTransform );
Matrix2D.multiply( ref _localTransform, ref _translationMatrix, out _localTransform );
if( parent == null )
{
_worldTransform = _localTransform;
_rotation = _localRotation;
_scale = _localScale;
_worldInverseDirty = true;
}
_localDirty = false;
}
if( parent != null )
{
Matrix2D.multiply( ref _localTransform, ref parent._worldTransform, out _worldTransform );
_rotation = _localRotation + parent._rotation;
_scale = parent._scale * _localScale;
_worldInverseDirty = true;
}
_worldToLocalDirty = true;
_positionDirty = true;
hierarchyDirty = DirtyType.Clean;
}
}