From 8af272b3abdb4ecc64fa7cf46ef0205e4398f01c Mon Sep 17 00:00:00 2001
From: Charles Krinke
Date: Thu, 1 Nov 2007 03:56:54 +0000
Subject: Thank you, Melanie for solving: When receiving an ObjectAdd packet,
the Rotation member is silently ignored and the prim is created with 0,0,0,1
rotation. The patch introduces a fix that passes the Rotation parameter from
the packet to the object and uses it in the actual object creation.
---
OpenSim/Region/Environment/Scenes/Scene.cs | 6 +++---
OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | 14 +++++++++++---
OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | 9 +++++++--
3 files changed, 21 insertions(+), 8 deletions(-)
(limited to 'OpenSim/Region/Environment/Scenes')
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index e37ad59..8da22c4 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -568,12 +568,12 @@ namespace OpenSim.Region.Environment.Scenes
///
///
///
- public void AddNewPrim(LLUUID ownerID, LLVector3 pos, PrimitiveBaseShape shape)
+ public void AddNewPrim(LLUUID ownerID, LLVector3 pos, LLQuaternion rot, PrimitiveBaseShape shape)
{
if (PermissionsMngr.CanRezObject(ownerID, pos))
{
SceneObjectGroup sceneOb =
- new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, shape);
+ new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape);
AddEntity(sceneOb);
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
// if grass or tree, make phantom
@@ -1565,4 +1565,4 @@ namespace OpenSim.Region.Environment.Scenes
}
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 2f86d2f..aaa25e7 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -322,7 +322,7 @@ namespace OpenSim.Region.Environment.Scenes
///
///
public SceneObjectGroup(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos,
- PrimitiveBaseShape shape)
+ LLQuaternion rot, PrimitiveBaseShape shape)
{
m_regionHandle = regionHandle;
m_scene = scene;
@@ -330,13 +330,21 @@ namespace OpenSim.Region.Environment.Scenes
// this.Pos = pos;
LLVector3 rootOffset = new LLVector3(0, 0, 0);
SceneObjectPart newPart =
- new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rootOffset);
+ new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset);
m_parts.Add(newPart.UUID, newPart);
SetPartAsRoot(newPart);
AttachToBackup();
}
+ ///
+ ///
+ ///
+ public SceneObjectGroup(Scene scene, ulong regionHandle, LLUUID ownerID, uint localID, LLVector3 pos,
+ PrimitiveBaseShape shape):this(scene, regionHandle, ownerID, localID, pos, LLQuaternion.Identity, shape)
+ {
+ }
+
#endregion
public string ToXmlString()
@@ -1386,4 +1394,4 @@ namespace OpenSim.Region.Environment.Scenes
Text = text;
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 80723fa..dacac4b 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -271,6 +271,11 @@ namespace OpenSim.Region.Environment.Scenes
{
}
+ public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID,
+ PrimitiveBaseShape shape, LLVector3 groupPosition, LLVector3 offsetPosition):this(regionHandle, parent, ownerID, localID, shape, groupPosition, LLQuaternion.Identity, offsetPosition)
+ {
+ }
+
///
/// Create a completely new SceneObjectPart (prim)
///
@@ -281,7 +286,7 @@ namespace OpenSim.Region.Environment.Scenes
///
///
public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, LLUUID ownerID, uint localID,
- PrimitiveBaseShape shape, LLVector3 groupPosition, LLVector3 offsetPosition)
+ PrimitiveBaseShape shape, LLVector3 groupPosition, LLQuaternion rotationOffset, LLVector3 offsetPosition)
{
m_name = "Primitive";
m_regionHandle = regionHandle;
@@ -297,7 +302,7 @@ namespace OpenSim.Region.Environment.Scenes
GroupPosition = groupPosition;
OffsetPosition = offsetPosition;
- RotationOffset = LLQuaternion.Identity;
+ RotationOffset = rotationOffset;
Velocity = new LLVector3(0, 0, 0);
AngularVelocity = new LLVector3(0, 0, 0);
Acceleration = new LLVector3(0, 0, 0);
--
cgit v1.1