aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs31
1 files changed, 16 insertions, 15 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
index 03ea969..2b84364 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
@@ -184,30 +184,31 @@ namespace OpenSim.Region.Framework.Scenes.Tests
184 Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId)); 184 Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId));
185 185
186 // This section is copied from ScenePresence.HandleAgentSit(). Correctness is not guaranteed. 186 // This section is copied from ScenePresence.HandleAgentSit(). Correctness is not guaranteed.
187 Quaternion r = part.SitTargetOrientation; 187 double x, y, z, m1, m2;
188 double x, y, z, m;
189 m = r.X * r.X + r.Y * r.Y + r.Z * r.Z + r.W * r.W;
190
191 if (Math.Abs(1.0 - m) > 0.000001)
192 {
193 m = 1.0 / Math.Sqrt(m);
194 r.X *= (float)m;
195 r.Y *= (float)m;
196 r.Z *= (float)m;
197 r.W *= (float)m;
198 }
199 188
189 Quaternion r = part.SitTargetOrientation;;
190 m1 = r.X * r.X + r.Y * r.Y;
191 m2 = r.Z * r.Z + r.W * r.W;
192
193 // Rotate the vector <0, 0, 1>
200 x = 2 * (r.X * r.Z + r.Y * r.W); 194 x = 2 * (r.X * r.Z + r.Y * r.W);
201 y = 2 * (-r.X * r.W + r.Y * r.Z); 195 y = 2 * (-r.X * r.W + r.Y * r.Z);
202 z = -r.X * r.X - r.Y * r.Y + r.Z * r.Z + r.W * r.W; 196 z = m2 - m1;
197
198 // Set m to be the square of the norm of r.
199 double m = m1 + m2;
200
201 // This constant is emperically determined to be what is used in SL.
202 // See also http://opensimulator.org/mantis/view.php?id=7096
203 double offset = 0.05;
203 204
204 Vector3 up = new Vector3((float)x, (float)y, (float)z); 205 Vector3 up = new Vector3((float)x, (float)y, (float)z);
205 Vector3 sitOffset = up * m_sp.Appearance.AvatarHeight * 0.02638f; 206 Vector3 sitOffset = up * (float)offset;
206 // End of copied section. 207 // End of copied section.
207 208
208 Assert.That( 209 Assert.That(
209 m_sp.AbsolutePosition, 210 m_sp.AbsolutePosition,
210 Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + sitOffset + ScenePresence.SIT_TARGET_ADJUSTMENT)); 211 Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition - sitOffset + ScenePresence.SIT_TARGET_ADJUSTMENT));
211 Assert.That(m_sp.PhysicsActor, Is.Null); 212 Assert.That(m_sp.PhysicsActor, Is.Null);
212 213
213 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); 214 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1));