// Check if bone position has changed
 public bool CheckIfBonePositionHasChanged()
 {
     if (m_oBoneCurrentPosition == null)
     {
         m_oBoneCurrentPosition = new Uni2DBonePosition();
     }
     return(m_oBoneCurrentPosition.SavePositionIfNeeded(transform));
 }
 // Save bone manipulated position
 public bool SaveBoneManipulatedPosition(bool a_bCheckIfDirty)
 {
     if (m_oBoneManipulatedPosition == null)
     {
         m_oBoneManipulatedPosition = new Uni2DBonePosition();
     }
     if (a_bCheckIfDirty)
     {
         return(m_oBoneManipulatedPosition.SavePositionIfNeeded(transform));
     }
     else
     {
         m_oBoneManipulatedPosition.SavePosition(transform);
         return(false);
     }
 }
    // Save bone pose position
    public void SaveBonePosePosition()
    {
        if (m_oBonePosePosition == null)
        {
            m_oBonePosePosition = new Uni2DBonePosition();
        }
        if (m_oBonePosePosition.SavePositionIfNeeded(transform))
        {
            // if the pose position has been changed reset the manipulated position
            ResetBoneManipulatedPosition();

            // if this bone have a parent reset the parent manipulated position also
            Uni2DSmoothBindingBone rParentBone = Parent;
            if (rParentBone != null)
            {
                rParentBone.ResetBoneManipulatedPosition();
            }
        }
    }