diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 98a3b29..1e749da 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -464,16 +464,33 @@ namespace OpenSim.Region.Framework.Scenes | |||
464 | // if (actor != null) | 464 | // if (actor != null) |
465 | if ((actor != null) && (m_parentID == 0)) // KF Do NOT update m_pos here if Av is sitting! | 465 | if ((actor != null) && (m_parentID == 0)) // KF Do NOT update m_pos here if Av is sitting! |
466 | m_pos = actor.Position; | 466 | m_pos = actor.Position; |
467 | 467 | else // OS Mantis #4063 | |
468 | // If we're sitting, we need to update our position | 468 | { // OS Mantis #4063 |
469 | if (m_parentID != 0) | 469 | // OpenSim Mantis #4063. Obtain the correct position of a seated avatar. In addition |
470 | { | 470 | // to providing the correct position while the avatar is seated, this value will also |
471 | SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); | 471 | // be used as the location to unsit to. |
472 | if (part != null) | 472 | // |
473 | m_parentPosition = part.AbsolutePosition; | 473 | // If m_parentID is not 0, assume we are a seated avatar and we should return the |
474 | } | 474 | // position based on the sittarget offset and rotation of the prim we are seated on. |
475 | 475 | // | |
476 | return m_parentPosition + m_pos; | 476 | // Generally, m_pos will contain the position of the avator in the sim unless the avatar |
477 | // is on a sit target. While on a sit target, m_pos will contain the desired offset | ||
478 | // without the parent rotation applied. | ||
479 | if (m_parentID != 0) // OS Mantis #4063 | ||
480 | { | ||
481 | SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); // OS Mantis #4063 | ||
482 | if (part != null) // OS Mantis #4063 | ||
483 | { // OS Mantis #4064 | ||
484 | return m_parentPosition + (m_pos * part.GetWorldRotation()); // OS Mantis #4063 | ||
485 | } | ||
486 | else // OS Mantis #4064 | ||
487 | { // OS Mantis #4063 | ||
488 | return m_parentPosition + m_pos; // OS Mantis #4064 | ||
489 | } // OS Mantis #4063 | ||
490 | } // OS Mantis #4063 | ||
491 | } // OS Mantis #4063 | ||
492 | |||
493 | return m_pos; // OS Mantis #4063 | ||
477 | } | 494 | } |
478 | set | 495 | set |
479 | { | 496 | { |