diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index edb8ca8..0282ad0 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2868,14 +2868,33 @@ namespace OpenSim.Region.Framework.Scenes | |||
2868 | 2868 | ||
2869 | m_pos = sitTargetPos + sitOffset + SIT_TARGET_ADJUSTMENT; | 2869 | m_pos = sitTargetPos + sitOffset + SIT_TARGET_ADJUSTMENT; |
2870 | 2870 | ||
2871 | // m_pos = sitTargetPos + SIT_TARGET_ADJUSTMENT - sitOffset; | 2871 | Vector3 newPos = sitTargetPos + sitOffset + SIT_TARGET_ADJUSTMENT; |
2872 | Rotation = sitTargetOrient; | 2872 | Quaternion newRot; |
2873 | |||
2874 | if (part.IsRoot) | ||
2875 | { | ||
2876 | newRot = sitTargetOrient; | ||
2877 | } | ||
2878 | else | ||
2879 | { | ||
2880 | newPos = newPos * part.RotationOffset; | ||
2881 | newRot = part.RotationOffset * sitTargetOrient; | ||
2882 | } | ||
2883 | |||
2884 | newPos += part.OffsetPosition; | ||
2885 | |||
2886 | m_pos = newPos; | ||
2887 | Rotation = newRot; | ||
2888 | |||
2873 | // ParentPosition = part.AbsolutePosition; | 2889 | // ParentPosition = part.AbsolutePosition; |
2874 | part.ParentGroup.AddAvatar(UUID); | 2890 | part.ParentGroup.AddAvatar(UUID); |
2875 | } | 2891 | } |
2876 | else | 2892 | else |
2877 | { | 2893 | { |
2878 | m_pos -= part.AbsolutePosition; | 2894 | // An viewer expects to specify sit positions as offsets to the root prim, even if a child prim is |
2895 | // being sat upon. | ||
2896 | m_pos -= part.GroupPosition; | ||
2897 | |||
2879 | // ParentPosition = part.AbsolutePosition; | 2898 | // ParentPosition = part.AbsolutePosition; |
2880 | part.ParentGroup.AddAvatar(UUID); | 2899 | part.ParentGroup.AddAvatar(UUID); |
2881 | 2900 | ||