aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-11-26 00:43:35 +0000
committerJustin Clark-Casey (justincc)2013-11-26 00:43:35 +0000
commit36d146bf272f33eb54de80579b163f27f2703fd4 (patch)
tree85fde9deaf5f8f2a742a759d3f470e1a4d5863e9 /OpenSim/Region
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC-36d146bf272f33eb54de80579b163f27f2703fd4.zip
opensim-SC-36d146bf272f33eb54de80579b163f27f2703fd4.tar.gz
opensim-SC-36d146bf272f33eb54de80579b163f27f2703fd4.tar.bz2
opensim-SC-36d146bf272f33eb54de80579b163f27f2703fd4.tar.xz
fix position changes when sitting on a prim with position and/or orientation explicitly specified
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs31
1 files changed, 28 insertions, 3 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 7a1017f..42a9b4d 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2267,7 +2267,6 @@ namespace OpenSim.Region.Framework.Scenes
2267 m_sitAvatarHeight = PhysicsActor.Size.Z; 2267 m_sitAvatarHeight = PhysicsActor.Size.Z;
2268 2268
2269 bool canSit = false; 2269 bool canSit = false;
2270 Vector3 pos = part.AbsolutePosition + offset;
2271 2270
2272 if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero) 2271 if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero)
2273 { 2272 {
@@ -2277,10 +2276,24 @@ namespace OpenSim.Region.Framework.Scenes
2277 2276
2278 offset = part.SitTargetPosition; 2277 offset = part.SitTargetPosition;
2279 sitOrientation = part.SitTargetOrientation; 2278 sitOrientation = part.SitTargetOrientation;
2279
2280// m_log.DebugFormat("Old sit orient {0}", sitOrientation);
2281 if (part.IsRoot)
2282 sitOrientation = sitOrientation;
2283 else
2284 sitOrientation = part.RotationOffset * sitOrientation;
2285// m_log.DebugFormat("New sit orient {0}", sitOrientation);
2286
2287// m_log.DebugFormat("Old sit offset {0}", offset);
2288 offset = offset * sitOrientation;
2289// m_log.DebugFormat("New sit offset {0}", offset);
2290
2280 canSit = true; 2291 canSit = true;
2281 } 2292 }
2282 else 2293 else
2283 { 2294 {
2295 Vector3 pos = part.AbsolutePosition + offset;
2296
2284 if (Util.GetDistanceTo(AbsolutePosition, pos) <= 10) 2297 if (Util.GetDistanceTo(AbsolutePosition, pos) <= 10)
2285 { 2298 {
2286// m_log.DebugFormat( 2299// m_log.DebugFormat(
@@ -2590,8 +2603,20 @@ namespace OpenSim.Region.Framework.Scenes
2590 2603
2591 //Quaternion result = (sitTargetOrient * vq) * nq; 2604 //Quaternion result = (sitTargetOrient * vq) * nq;
2592 2605
2593 m_pos = sitTargetPos + SIT_TARGET_ADJUSTMENT + part.OffsetPosition; 2606 Vector3 newPos = sitTargetPos + SIT_TARGET_ADJUSTMENT;
2594 Rotation = part.RotationOffset * sitTargetOrient; 2607
2608 if (part.IsRoot)
2609 Rotation = sitTargetOrient;
2610 else
2611 Rotation = part.RotationOffset * sitTargetOrient;
2612
2613// m_log.DebugFormat("Old offset2 {0}", newPos);
2614 newPos = newPos * Rotation;
2615// m_log.DebugFormat("New offset2 {0}", newPos);
2616
2617 newPos += part.OffsetPosition;
2618
2619 m_pos = newPos;
2595 ParentPosition = part.AbsolutePosition; 2620 ParentPosition = part.AbsolutePosition;
2596 } 2621 }
2597 else 2622 else