aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes
diff options
context:
space:
mode:
authorMelanie2013-12-16 22:11:03 +0000
committerMelanie2013-12-16 22:11:03 +0000
commitfe01e7d1cce9d875b5989931b9652e4cd00c311d (patch)
treed7e12171d5952d5a96c3f405a5d80c6eebb00937 /OpenSim/Region/Framework/Scenes
parentThis is the acutal sitting avatar crossing code. This commit implements the (diff)
parentMerge branch 'justincc-master' (diff)
downloadopensim-SC_OLD-fe01e7d1cce9d875b5989931b9652e4cd00c311d.zip
opensim-SC_OLD-fe01e7d1cce9d875b5989931b9652e4cd00c311d.tar.gz
opensim-SC_OLD-fe01e7d1cce9d875b5989931b9652e4cd00c311d.tar.bz2
opensim-SC_OLD-fe01e7d1cce9d875b5989931b9652e4cd00c311d.tar.xz
Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs25
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/UuidGatherer.cs15
3 files changed, 39 insertions, 15 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index edb8ca8..cf98ef2 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2866,16 +2866,33 @@ namespace OpenSim.Region.Framework.Scenes
2866 Vector3 up = new Vector3((float)x, (float)y, (float)z); 2866 Vector3 up = new Vector3((float)x, (float)y, (float)z);
2867 Vector3 sitOffset = up * Appearance.AvatarHeight * 0.02638f; 2867 Vector3 sitOffset = up * Appearance.AvatarHeight * 0.02638f;
2868 2868
2869 m_pos = sitTargetPos + sitOffset + SIT_TARGET_ADJUSTMENT; 2869 Vector3 newPos = sitTargetPos + sitOffset + SIT_TARGET_ADJUSTMENT;
2870 Quaternion newRot;
2871
2872 if (part.IsRoot)
2873 {
2874 newRot = sitTargetOrient;
2875 }
2876 else
2877 {
2878 newPos = newPos * part.RotationOffset;
2879 newRot = part.RotationOffset * sitTargetOrient;
2880 }
2881
2882 newPos += part.OffsetPosition;
2883
2884 m_pos = newPos;
2885 Rotation = newRot;
2870 2886
2871// m_pos = sitTargetPos + SIT_TARGET_ADJUSTMENT - sitOffset;
2872 Rotation = sitTargetOrient;
2873// ParentPosition = part.AbsolutePosition; 2887// ParentPosition = part.AbsolutePosition;
2874 part.ParentGroup.AddAvatar(UUID); 2888 part.ParentGroup.AddAvatar(UUID);
2875 } 2889 }
2876 else 2890 else
2877 { 2891 {
2878 m_pos -= part.AbsolutePosition; 2892 // An viewer expects to specify sit positions as offsets to the root prim, even if a child prim is
2893 // being sat upon.
2894 m_pos -= part.GroupPosition;
2895
2879// ParentPosition = part.AbsolutePosition; 2896// ParentPosition = part.AbsolutePosition;
2880 part.ParentGroup.AddAvatar(UUID); 2897 part.ParentGroup.AddAvatar(UUID);
2881 2898
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
index acaeb90..0911f00 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
@@ -111,15 +111,13 @@ namespace OpenSim.Region.Framework.Scenes.Tests
111 111
112 SceneObjectPart part = SceneHelpers.AddSceneObject(m_scene).RootPart; 112 SceneObjectPart part = SceneHelpers.AddSceneObject(m_scene).RootPart;
113 113
114 // We need to preserve this here because phys actor is removed by the sit.
115 Vector3 spPhysActorSize = m_sp.PhysicsActor.Size;
114 m_sp.HandleAgentRequestSit(m_sp.ControllingClient, m_sp.UUID, part.UUID, Vector3.Zero); 116 m_sp.HandleAgentRequestSit(m_sp.ControllingClient, m_sp.UUID, part.UUID, Vector3.Zero);
115 117
116 // FIXME: This is different for live avatars - z position is adjusted. This is half the height of the
117 // default avatar.
118 // Curiously, Vector3.ToString() will not display the last two places of the float. For example,
119 // printing out npc.AbsolutePosition will give <0, 0, 0.8454993> not <0, 0, 0.845499337>
120 Assert.That( 118 Assert.That(
121 m_sp.AbsolutePosition, 119 m_sp.AbsolutePosition,
122 Is.EqualTo(part.AbsolutePosition + new Vector3(0, 0, 0.845499337f))); 120 Is.EqualTo(part.AbsolutePosition + new Vector3(0, 0, spPhysActorSize.Z / 2)));
123 121
124 m_sp.StandUp(); 122 m_sp.StandUp();
125 123
@@ -147,9 +145,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests
147 145
148 Assert.That(part.SitTargetAvatar, Is.EqualTo(m_sp.UUID)); 146 Assert.That(part.SitTargetAvatar, Is.EqualTo(m_sp.UUID));
149 Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId)); 147 Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId));
150 Assert.That( 148// Assert.That(
151 m_sp.AbsolutePosition, 149// m_sp.AbsolutePosition,
152 Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + ScenePresence.SIT_TARGET_ADJUSTMENT)); 150// Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + ScenePresence.SIT_TARGET_ADJUSTMENT));
153 Assert.That(m_sp.PhysicsActor, Is.Null); 151 Assert.That(m_sp.PhysicsActor, Is.Null);
154 152
155 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); 153 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1));
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index 502c748..3e074b9 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -181,9 +181,18 @@ namespace OpenSim.Region.Framework.Scenes
181 181
182 if (part.ParticleSystem.Length > 0) 182 if (part.ParticleSystem.Length > 0)
183 { 183 {
184 Primitive.ParticleSystem ps = new Primitive.ParticleSystem(part.ParticleSystem, 0); 184 try
185 if (ps.Texture != UUID.Zero) 185 {
186 assetUuids[ps.Texture] = AssetType.Texture; 186 Primitive.ParticleSystem ps = new Primitive.ParticleSystem(part.ParticleSystem, 0);
187 if (ps.Texture != UUID.Zero)
188 assetUuids[ps.Texture] = AssetType.Texture;
189 }
190 catch (Exception e)
191 {
192 m_log.WarnFormat(
193 "[UUID GATHERER]: Could not check particle system for part {0} {1} in object {2} {3} since it is corrupt. Continuing.",
194 part.Name, part.UUID, sceneObject.Name, sceneObject.UUID);
195 }
187 } 196 }
188 197
189 TaskInventoryDictionary taskDictionary = (TaskInventoryDictionary)part.TaskInventory.Clone(); 198 TaskInventoryDictionary taskDictionary = (TaskInventoryDictionary)part.TaskInventory.Clone();