From d582db6132ef7bea8b15e7a9f0dd64400d43b517 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 2 Sep 2014 23:35:03 +0100 Subject: Fix recent regression from 473c5594 where camera started to judder on moving vehicles. Other parts of OpenSimulator are relying on SP.Velocity == 0 for vehicles. So add and use SP.GetWorldVelocity() instead when we need vehicle velocity, along the same lines as existing SP.GetWorldRotation() --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 40 +++++++++++++++--------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index e0b7640..f2a636a 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -608,8 +608,11 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Current velocity of the avatar. + /// Velocity of the avatar with respect to its local reference frame. /// + /// + /// So when sat on a vehicle this will be 0. To get velocity with respect to the world use GetWorldVelocity() + /// public override Vector3 Velocity { get @@ -622,10 +625,10 @@ namespace OpenSim.Region.Framework.Scenes // "[SCENE PRESENCE]: Set velocity {0} for {1} in {2} via getting Velocity!", // m_velocity, Name, Scene.RegionInfo.RegionName); } - else if (ParentPart != null) - { - return ParentPart.ParentGroup.Velocity; - } +// else if (ParentPart != null) +// { +// return ParentPart.ParentGroup.Velocity; +// } return m_velocity; } @@ -749,25 +752,32 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Gets the world rotation of this presence. + /// Get rotation relative to the world. /// - /// - /// Unlike Rotation, this returns the world rotation no matter whether the avatar is sitting on a prim or not. - /// /// public Quaternion GetWorldRotation() { - if (IsSatOnObject) - { - SceneObjectPart sitPart = ParentPart; + SceneObjectPart sitPart = ParentPart; - if (sitPart != null) - return sitPart.GetWorldRotation() * Rotation; - } + if (sitPart != null) + return sitPart.GetWorldRotation() * Rotation; return Rotation; } + /// + /// Get velocity relative to the world. + /// + public Vector3 GetWorldVelocity() + { + SceneObjectPart sitPart = ParentPart; + + if (sitPart != null) + return sitPart.ParentGroup.Velocity; + + return Velocity; + } + public void AdjustKnownSeeds() { Dictionary seeds; -- cgit v1.1