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