Universe.Region.SceneObjectGroup.UpdateRootPosition C# (CSharp) Method

UpdateRootPosition() public method

public UpdateRootPosition ( System.Vector3 pos ) : void
pos System.Vector3
return void
        public void UpdateRootPosition(Vector3 pos)
        {
            foreach (SceneObjectPart part in ChildrenList)
            {
                part.StoreUndoState();
            }
            Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
            Vector3 oldPos =
                IsAttachment
                    ? new Vector3(m_rootPart.OffsetPosition.X, m_rootPart.OffsetPosition.Y,
                                  m_rootPart.OffsetPosition.Z)
                    : new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X,
                                  AbsolutePosition.Y + m_rootPart.OffsetPosition.Y,
                                  AbsolutePosition.Z + m_rootPart.OffsetPosition.Z);
            Vector3 diff = oldPos - newPos;
            Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z);
            Quaternion partRotation = m_rootPart.GetRotationOffset();
            axDiff *= Quaternion.Inverse(partRotation);
            diff = axDiff;
            if (IsAttachment)
            {
                m_rootPart.FixOffsetPosition((newPos), false);
                foreach (SceneObjectPart obPart in m_partsList)
                {
                    if (obPart.UUID != m_rootPart.UUID)
                    {
                        obPart.OffsetPosition += diff;
                        obPart.SetGroupPosition(AbsolutePosition);
                    }
                }
            }
            else
            {
                foreach (SceneObjectPart obPart in m_partsList)
                {
                    if (obPart.UUID != m_rootPart.UUID)
                        obPart.FixOffsetPosition((obPart.OffsetPosition + diff), false);
                }

                AbsolutePosition = newPos;
            }

            HasGroupChanged = true;
            ScheduleGroupTerseUpdate();
        }
SceneObjectGroup