aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs
diff options
context:
space:
mode:
authorUbitUmarov2015-09-01 11:43:07 +0100
committerUbitUmarov2015-09-01 11:43:07 +0100
commitfb78b182520fc9bb0f971afd0322029c70278ea6 (patch)
treeb4e30d383938fdeef8c92d1d1c2f44bb61d329bd /OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs
parentlixo (diff)
parentMantis #7713: fixed bug introduced by 1st MOSES patch. (diff)
downloadopensim-SC-fb78b182520fc9bb0f971afd0322029c70278ea6.zip
opensim-SC-fb78b182520fc9bb0f971afd0322029c70278ea6.tar.gz
opensim-SC-fb78b182520fc9bb0f971afd0322029c70278ea6.tar.bz2
opensim-SC-fb78b182520fc9bb0f971afd0322029c70278ea6.tar.xz
Merge remote-tracking branch 'os/master'
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs155
1 files changed, 155 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs
new file mode 100644
index 0000000..974529a
--- /dev/null
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs
@@ -0,0 +1,155 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Reflection;
30using System.Threading;
31using NUnit.Framework;
32using OpenMetaverse;
33using OpenSim.Framework;
34using OpenSim.Framework.Communications;
35using OpenSim.Region.Framework.Scenes;
36using OpenSim.Tests.Common;
37
38namespace OpenSim.Region.Framework.Scenes.Tests
39{
40 /// <summary>
41 /// Spatial scene object tests (will eventually cover root and child part position, rotation properties, etc.)
42 /// </summary>
43 [TestFixture]
44 public class SceneObjectSpatialTests : OpenSimTestCase
45 {
46 TestScene m_scene;
47 UUID m_ownerId = TestHelpers.ParseTail(0x1);
48
49 [SetUp]
50 public override void SetUp()
51 {
52 base.SetUp();
53
54 m_scene = new SceneHelpers().SetupScene();
55 }
56
57 [Test]
58 public void TestGetSceneObjectGroupPosition()
59 {
60 TestHelpers.InMethod();
61
62 Vector3 position = new Vector3(10, 20, 30);
63
64 SceneObjectGroup so
65 = SceneHelpers.CreateSceneObject(1, m_ownerId, "obj1", 0x10);
66 so.AbsolutePosition = position;
67 m_scene.AddNewSceneObject(so, false);
68
69 Assert.That(so.AbsolutePosition, Is.EqualTo(position));
70 }
71
72 [Test]
73 public void TestGetRootPartPosition()
74 {
75 TestHelpers.InMethod();
76
77 Vector3 partPosition = new Vector3(10, 20, 30);
78
79 SceneObjectGroup so
80 = SceneHelpers.CreateSceneObject(1, m_ownerId, "obj1", 0x10);
81 so.AbsolutePosition = partPosition;
82 m_scene.AddNewSceneObject(so, false);
83
84 Assert.That(so.RootPart.AbsolutePosition, Is.EqualTo(partPosition));
85 Assert.That(so.RootPart.GroupPosition, Is.EqualTo(partPosition));
86 Assert.That(so.RootPart.GetWorldPosition(), Is.EqualTo(partPosition));
87 Assert.That(so.RootPart.RelativePosition, Is.EqualTo(partPosition));
88 Assert.That(so.RootPart.OffsetPosition, Is.EqualTo(Vector3.Zero));
89 }
90
91 [Test]
92 public void TestGetChildPartPosition()
93 {
94 TestHelpers.InMethod();
95
96 Vector3 rootPartPosition = new Vector3(10, 20, 30);
97 Vector3 childOffsetPosition = new Vector3(2, 3, 4);
98
99 SceneObjectGroup so
100 = SceneHelpers.CreateSceneObject(2, m_ownerId, "obj1", 0x10);
101 so.AbsolutePosition = rootPartPosition;
102 so.Parts[1].OffsetPosition = childOffsetPosition;
103
104 m_scene.AddNewSceneObject(so, false);
105
106 // Calculate child absolute position.
107 Vector3 childPosition = new Vector3(rootPartPosition + childOffsetPosition);
108
109 SceneObjectPart childPart = so.Parts[1];
110 Assert.That(childPart.AbsolutePosition, Is.EqualTo(childPosition));
111 Assert.That(childPart.GroupPosition, Is.EqualTo(rootPartPosition));
112 Assert.That(childPart.GetWorldPosition(), Is.EqualTo(childPosition));
113 Assert.That(childPart.RelativePosition, Is.EqualTo(childOffsetPosition));
114 Assert.That(childPart.OffsetPosition, Is.EqualTo(childOffsetPosition));
115 }
116
117 [Test]
118 public void TestGetChildPartPositionAfterObjectRotation()
119 {
120 TestHelpers.InMethod();
121
122 Vector3 rootPartPosition = new Vector3(10, 20, 30);
123 Vector3 childOffsetPosition = new Vector3(2, 3, 4);
124
125 SceneObjectGroup so
126 = SceneHelpers.CreateSceneObject(2, m_ownerId, "obj1", 0x10);
127 so.AbsolutePosition = rootPartPosition;
128 so.Parts[1].OffsetPosition = childOffsetPosition;
129
130 m_scene.AddNewSceneObject(so, false);
131
132 so.UpdateGroupRotationR(Quaternion.CreateFromEulers(0, 0, -90 * Utils.DEG_TO_RAD));
133
134 // Calculate child absolute position.
135 Vector3 rotatedChildOffsetPosition
136 = new Vector3(childOffsetPosition.Y, -childOffsetPosition.X, childOffsetPosition.Z);
137
138 Vector3 childPosition = new Vector3(rootPartPosition + rotatedChildOffsetPosition);
139
140 SceneObjectPart childPart = so.Parts[1];
141
142 // FIXME: Should be childPosition after rotation?
143 Assert.That(childPart.AbsolutePosition, Is.EqualTo(rootPartPosition + childOffsetPosition));
144
145 Assert.That(childPart.GroupPosition, Is.EqualTo(rootPartPosition));
146 Assert.That(childPart.GetWorldPosition(), Is.EqualTo(childPosition));
147
148 // Relative to root part as (0, 0, 0)
149 Assert.That(childPart.RelativePosition, Is.EqualTo(childOffsetPosition));
150
151 // Relative to root part as (0, 0, 0)
152 Assert.That(childPart.OffsetPosition, Is.EqualTo(childOffsetPosition));
153 }
154 }
155} \ No newline at end of file