diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs
index b6f304be73..9ac7994e57 100644
--- a/OpenSim/Framework/General/Interfaces/IClientAPI.cs
+++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs
@@ -75,6 +75,7 @@ namespace OpenSim.Framework.Interfaces
public delegate void UUIDNameRequest(LLUUID id, IClientAPI remote_client);
+ public delegate void AddNewPrim(LLUUID ownerID, LLVector3 pos, PrimitiveBaseShape shape);
public interface IClientAPI
{
@@ -94,7 +95,7 @@ namespace OpenSim.Framework.Interfaces
event GenericCall2 OnCompleteMovementToRegion;
event UpdateAgent OnAgentUpdate;
event GenericCall OnRequestAvatarsData;
- event GenericCall4 OnAddPrim;
+ event AddNewPrim OnAddPrim;
event ObjectDuplicate OnObjectDuplicate;
event UpdateVector OnGrapObject;
event ObjectSelect OnDeGrapObject;
diff --git a/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
index a6671d10fc..b9a8c90ca9 100644
--- a/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
@@ -1,4 +1,5 @@
using libsecondlife;
+using libsecondlife.Packets;
namespace OpenSim.Framework.Types
{
@@ -97,6 +98,34 @@ namespace OpenSim.Framework.Types
return primShape;
}
- }
+ public static PrimitiveBaseShape FromAddPacket(ObjectAddPacket addPacket)
+ {
+ PrimitiveBaseShape pShape = new PrimitiveBaseShape();
+
+ pShape.PCode = addPacket.ObjectData.PCode;
+ pShape.PathBegin = addPacket.ObjectData.PathBegin;
+ pShape.PathEnd = addPacket.ObjectData.PathEnd;
+ pShape.PathScaleX = addPacket.ObjectData.PathScaleX;
+ pShape.PathScaleY = addPacket.ObjectData.PathScaleY;
+ pShape.PathShearX = addPacket.ObjectData.PathShearX;
+ pShape.PathShearY = addPacket.ObjectData.PathShearY;
+ pShape.PathSkew = addPacket.ObjectData.PathSkew;
+ pShape.ProfileBegin = addPacket.ObjectData.ProfileBegin;
+ pShape.ProfileEnd = addPacket.ObjectData.ProfileEnd;
+ pShape.Scale = addPacket.ObjectData.Scale;
+ pShape.PathCurve = addPacket.ObjectData.PathCurve;
+ pShape.ProfileCurve = addPacket.ObjectData.ProfileCurve;
+ pShape.ProfileHollow = addPacket.ObjectData.ProfileHollow;
+ pShape.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
+ pShape.PathRevolutions = addPacket.ObjectData.PathRevolutions;
+ pShape.PathTaperX = addPacket.ObjectData.PathTaperX;
+ pShape.PathTaperY = addPacket.ObjectData.PathTaperY;
+ pShape.PathTwist = addPacket.ObjectData.PathTwist;
+ pShape.PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
+ LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-9999-000000000005"));
+ pShape.TextureEntry = ntex.ToBytes();
+ return pShape;
+ }
+ }
}
diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs
index b47d95af83..2be5b0e198 100644
--- a/OpenSim/Region/ClientStack/ClientView.API.cs
+++ b/OpenSim/Region/ClientStack/ClientView.API.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Region.ClientStack
public event ObjectSelect OnDeGrapObject;
public event ObjectDuplicate OnObjectDuplicate;
public event MoveObject OnGrapUpdate;
- public event GenericCall4 OnAddPrim;
+ public event AddNewPrim OnAddPrim;
public event UpdateShape OnUpdatePrimShape;
public event ObjectSelect OnObjectSelect;
public event GenericCall7 OnObjectDescription;
diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs
index df2bf348a8..013b7550ff 100644
--- a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs
+++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs
@@ -217,7 +217,10 @@ namespace OpenSim.Region.ClientStack
case PacketType.ObjectAdd:
if (OnAddPrim != null)
{
- OnAddPrim(Pack, this);
+ ObjectAddPacket packet = (ObjectAddPacket) Pack ;
+ PrimitiveBaseShape primShape = PrimitiveBaseShape.FromAddPacket( packet );
+
+ OnAddPrim(this.AgentId, packet.ObjectData.RayEnd, primShape );
}
break;
case PacketType.ObjectShape:
diff --git a/OpenSim/Region/Environment/Scenes/Primitive.cs b/OpenSim/Region/Environment/Scenes/Primitive.cs
index 5cb2930daa..4bb43d24d4 100644
--- a/OpenSim/Region/Environment/Scenes/Primitive.cs
+++ b/OpenSim/Region/Environment/Scenes/Primitive.cs
@@ -130,7 +130,7 @@ namespace OpenSim.Region.Environment.Scenes
///
///
///
- public Primitive(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID, bool isRoot, EntityBase parent, SceneObject rootObject)
+ public Primitive(ulong regionHandle, Scene world, LLUUID ownerID, uint localID, bool isRoot, EntityBase parent, SceneObject rootObject, PrimitiveBaseShape shape, LLVector3 pos)
{
m_regionHandle = regionHandle;
m_world = world;
@@ -138,7 +138,8 @@ namespace OpenSim.Region.Environment.Scenes
this.m_Parent = parent;
this.m_isRootPrim = isRoot;
this.m_RootParent = rootObject;
- this.CreateFromPacket(addPacket, ownerID, localID);
+
+ this.CreateFromPacket(ownerID, localID, pos, shape);
this.Rotation = Axiom.Math.Quaternion.Identity;
}
@@ -209,43 +210,20 @@ namespace OpenSim.Region.Environment.Scenes
///
///
///
- public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
+ public void CreateFromPacket(LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape)
{
this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
this.OwnerID = ownerID;
this.CreatorID = this.OwnerID;
this.LastOwnerID = LLUUID.Zero;
- this.Pos = addPacket.ObjectData.RayEnd;
+ this.Pos = pos;
this.uuid = LLUUID.Random();
this.m_localId = (uint)(localID);
- PrimitiveBaseShape pShape = new PrimitiveBaseShape();
- this.m_Shape = pShape;
-
- pShape.PCode = addPacket.ObjectData.PCode;
- pShape.PathBegin = addPacket.ObjectData.PathBegin;
- pShape.PathEnd = addPacket.ObjectData.PathEnd;
- pShape.PathScaleX = addPacket.ObjectData.PathScaleX;
- pShape.PathScaleY = addPacket.ObjectData.PathScaleY;
- pShape.PathShearX = addPacket.ObjectData.PathShearX;
- pShape.PathShearY = addPacket.ObjectData.PathShearY;
- pShape.PathSkew = addPacket.ObjectData.PathSkew;
- pShape.ProfileBegin = addPacket.ObjectData.ProfileBegin;
- pShape.ProfileEnd = addPacket.ObjectData.ProfileEnd;
- pShape.Scale = addPacket.ObjectData.Scale;
- pShape.PathCurve = addPacket.ObjectData.PathCurve;
- pShape.ProfileCurve = addPacket.ObjectData.ProfileCurve;
- pShape.ProfileHollow = addPacket.ObjectData.ProfileHollow;
- pShape.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
- pShape.PathRevolutions = addPacket.ObjectData.PathRevolutions;
- pShape.PathTaperX = addPacket.ObjectData.PathTaperX;
- pShape.PathTaperY = addPacket.ObjectData.PathTaperY;
- pShape.PathTwist = addPacket.ObjectData.PathTwist;
- pShape.PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
- LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-9999-000000000005"));
- pShape.TextureEntry = ntex.ToBytes();
+ this.m_Shape = shape;
this.updateFlag = 1;
}
+
#endregion
#region Linking / unlinking
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 4a4b7a09d5..417f8178d4 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -413,26 +413,16 @@ namespace OpenSim.Region.Environment.Scenes
return myID;
}
- ///
- ///
- ///
- ///
- ///
- public void AddNewPrim(Packet addPacket, IClientAPI agentClient)
- {
- AddNewPrim((ObjectAddPacket)addPacket, agentClient.AgentId);
- }
-
///
///
///
///
///
- public void AddNewPrim(ObjectAddPacket addPacket, LLUUID ownerID)
+ public void AddNewPrim(LLUUID ownerID, LLVector3 pos, PrimitiveBaseShape shape)
{
try
{
- SceneObject sceneOb = new SceneObject(m_regionHandle, this, addPacket, ownerID, this.PrimIDAllocate());
+ SceneObject sceneOb = new SceneObject(m_regionHandle, this, ownerID, this.PrimIDAllocate(), pos, shape);
this.Entities.Add(sceneOb.rootUUID, sceneOb);
// Trigger event for listeners
@@ -444,13 +434,6 @@ namespace OpenSim.Region.Environment.Scenes
}
}
- public override uint AddNewPrim(LLUUID ownerId, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID texture, int flags)
- {
- uint id = NextLocalId;
-
- throw new NotImplementedException("Not implemented yet.");
- }
-
#endregion
#region Add/Remove Avatar Methods
diff --git a/OpenSim/Region/Environment/Scenes/SceneBase.cs b/OpenSim/Region/Environment/Scenes/SceneBase.cs
index 811f54c52a..c852499364 100644
--- a/OpenSim/Region/Environment/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneBase.cs
@@ -146,8 +146,6 @@ namespace OpenSim.Region.Environment.Scenes
///
public abstract void AddNewClient(IClientAPI client, bool child);
- public abstract uint AddNewPrim(LLUUID ownerId, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID texture, int flags);
-
///
///
///
diff --git a/OpenSim/Region/Environment/Scenes/SceneObject.cs b/OpenSim/Region/Environment/Scenes/SceneObject.cs
index 93b6e8df60..5eed1150f3 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObject.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObject.cs
@@ -30,6 +30,7 @@ using System.Text;
using libsecondlife;
using libsecondlife.Packets;
using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Types;
using OpenSim.Physics.Manager;
namespace OpenSim.Region.Environment.Scenes
@@ -67,12 +68,12 @@ namespace OpenSim.Region.Environment.Scenes
///
///
///
- public SceneObject(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
+ public SceneObject(ulong regionHandle, Scene world, LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape)
{
m_regionHandle = regionHandle;
m_world = world;
- this.Pos = addPacket.ObjectData.RayEnd;
- this.CreateRootFromPacket(addPacket, ownerID, localID);
+ this.Pos = pos;
+ this.CreateRootFromPacket(ownerID, localID, shape, pos );
}
///
@@ -90,9 +91,9 @@ namespace OpenSim.Region.Environment.Scenes
///
///
///
- public void CreateRootFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID)
+ public void CreateRootFromPacket(LLUUID agentID, uint localID, PrimitiveBaseShape shape, LLVector3 pos)
{
- this.rootPrimitive = new Primitive( this.m_regionHandle, this.m_world, addPacket, agentID, localID, true, this, this);
+ this.rootPrimitive = new Primitive( this.m_regionHandle, this.m_world, agentID, localID, true, this, this, shape, pos);
this.children.Add(rootPrimitive);
this.ChildPrimitives.Add(this.rootUUID, this.rootPrimitive);
}
diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs
index 87e877cc44..095ba1da38 100644
--- a/OpenSim/Region/Examples/SimpleApp/Program.cs
+++ b/OpenSim/Region/Examples/SimpleApp/Program.cs
@@ -68,7 +68,7 @@ namespace SimpleApp
PrimData primData = new PrimData();
primData.Scale = new LLVector3(1, 1, 1);
- m_localId = world.AddNewPrim( LLUUID.Zero, primData, LLVector3.Zero, new LLQuaternion(0, 0, 0, 0), LLUUID.Zero, 0);
+ //m_localId = world.AddNewPrim( LLUUID.Zero, primData, LLVector3.Zero, new LLQuaternion(0, 0, 0, 0), LLUUID.Zero, 0);
}