virtual protected void UpdateFromParent()
{
if ( parent != null )
{
// Update orientation
Quaternion parentOrientation = parent.DerivedOrientation;
if ( inheritOrientation )
{
// combine local orientation with parents
derivedOrientation = parentOrientation * orientation;
}
else
{
// no inheritance
derivedOrientation = orientation;
}
// update scale
Vector3 parentScale = parent.DerivedScale;
if ( inheritScale )
{
// set own scale, just combine as equivalent axes, no shearing
derivedScale = parentScale * scale;
}
else
{
// do not inherit parents scale
derivedScale = scale;
}
// Change position vector based on parent's orientation & scale
derivedPosition = parentOrientation * ( parentScale * position );
// add parents positition to local altered position
derivedPosition += parent.DerivedPosition;
}
else
{
// Root node, no parent
derivedOrientation = orientation;
derivedPosition = position;
derivedScale = scale;
}
needParentUpdate = false;
needTransformUpdate = true;
needRelativeTransformUpdate = true;
if ( suppressUpdateEvent == false )
{
OnUpdatedFromParent();
}
}