More work on SceneObject/Primitive and building (Linking is a work in progress as is all). Committing now as I've finished for the night and will be continued tomorrow.

Sugilite
MW 2007-07-01 21:04:33 +00:00
parent 97d441fca4
commit 2852cda727
7 changed files with 129 additions and 23 deletions

View File

@ -163,8 +163,8 @@ namespace OpenSim.Framework.Interfaces
void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint); void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint);
void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID , uint flags); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID , uint flags);
void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags);
void SendPrimitiveToClient2(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID);
void SendPrimitiveToClient2(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID);
void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation); void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation);
} }
} }

View File

@ -36,7 +36,6 @@ namespace OpenSim.Framework.Types
public LLVector3 Scale; public LLVector3 Scale;
public byte PathCurve; public byte PathCurve;
public byte ProfileCurve; public byte ProfileCurve;
public uint ParentID = 0;
public ushort ProfileHollow; public ushort ProfileHollow;
public sbyte PathRadiusOffset; public sbyte PathRadiusOffset;
public byte PathRevolutions; public byte PathRevolutions;
@ -73,13 +72,13 @@ namespace OpenSim.Framework.Types
} }
public static PrimitiveBaseShape DefaultCube() public static PrimitiveBaseShape DefaultBox()
{ {
PrimitiveBaseShape primShape = new PrimitiveBaseShape(); PrimitiveBaseShape primShape = new PrimitiveBaseShape();
primShape.type = ShapeType.Box;
primShape.Scale = new LLVector3(0.5f, 0.5f, 0.5f); primShape.Scale = new LLVector3(0.5f, 0.5f, 0.5f);
primShape.PCode = 9; primShape.PCode = 9;
primShape.ParentID = 0;
primShape.PathBegin = 0; primShape.PathBegin = 0;
primShape.PathEnd = 0; primShape.PathEnd = 0;
primShape.PathScaleX = 0; primShape.PathScaleX = 0;

View File

@ -629,7 +629,7 @@ namespace OpenSim.Region.ClientStack
} }
public void SendPrimitiveToClient2(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID) public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID)
{ {
ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
outPacket.RegionData.RegionHandle = regionHandle; outPacket.RegionData.RegionHandle = regionHandle;
@ -639,6 +639,8 @@ namespace OpenSim.Region.ClientStack
outPacket.ObjectData[0].ID = localID; outPacket.ObjectData[0].ID = localID;
outPacket.ObjectData[0].FullID = objectID; outPacket.ObjectData[0].FullID = objectID;
outPacket.ObjectData[0].OwnerID = ownerID; outPacket.ObjectData[0].OwnerID = ownerID;
outPacket.ObjectData[0].Text = enc.GetBytes(text);
outPacket.ObjectData[0].ParentID = parentID;
byte[] pb = pos.GetBytes(); byte[] pb = pos.GetBytes();
Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length); Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
byte[] rot = rotation.GetBytes(); byte[] rot = rotation.GetBytes();
@ -646,7 +648,7 @@ namespace OpenSim.Region.ClientStack
OutPacket(outPacket); OutPacket(outPacket);
} }
public void SendPrimitiveToClient2(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID) public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID)
{ {
ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
outPacket.RegionData.RegionHandle = regionHandle; outPacket.RegionData.RegionHandle = regionHandle;
@ -656,6 +658,8 @@ namespace OpenSim.Region.ClientStack
outPacket.ObjectData[0].ID = localID; outPacket.ObjectData[0].ID = localID;
outPacket.ObjectData[0].FullID = objectID; outPacket.ObjectData[0].FullID = objectID;
outPacket.ObjectData[0].OwnerID = ownerID; outPacket.ObjectData[0].OwnerID = ownerID;
outPacket.ObjectData[0].Text = enc.GetBytes(text);
outPacket.ObjectData[0].ParentID = parentID;
byte[] pb = pos.GetBytes(); byte[] pb = pos.GetBytes();
Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length); Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
@ -876,6 +880,7 @@ namespace OpenSim.Region.ClientStack
LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID); LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID);
objectData.TextureEntry = ntex.ToBytes(); objectData.TextureEntry = ntex.ToBytes();
objectData.OwnerID = primData.OwnerID; objectData.OwnerID = primData.OwnerID;
objectData.ParentID = primData.ParentID;
objectData.PCode = primData.PCode; objectData.PCode = primData.PCode;
objectData.PathBegin = primData.PathBegin; objectData.PathBegin = primData.PathBegin;
objectData.PathEnd = primData.PathEnd; objectData.PathEnd = primData.PathEnd;
@ -889,7 +894,6 @@ namespace OpenSim.Region.ClientStack
objectData.Scale = primData.Scale; objectData.Scale = primData.Scale;
objectData.PathCurve = primData.PathCurve; objectData.PathCurve = primData.PathCurve;
objectData.ProfileCurve = primData.ProfileCurve; objectData.ProfileCurve = primData.ProfileCurve;
objectData.ParentID = primData.ParentID;
objectData.ProfileHollow = primData.ProfileHollow; objectData.ProfileHollow = primData.ProfileHollow;
objectData.PathRadiusOffset = primData.PathRadiusOffset; objectData.PathRadiusOffset = primData.PathRadiusOffset;
objectData.PathRevolutions = primData.PathRevolutions; objectData.PathRevolutions = primData.PathRevolutions;
@ -916,7 +920,6 @@ namespace OpenSim.Region.ClientStack
objectData.Scale = primData.Scale; objectData.Scale = primData.Scale;
objectData.PathCurve = primData.PathCurve; objectData.PathCurve = primData.PathCurve;
objectData.ProfileCurve = primData.ProfileCurve; objectData.ProfileCurve = primData.ProfileCurve;
objectData.ParentID = primData.ParentID;
objectData.ProfileHollow = primData.ProfileHollow; objectData.ProfileHollow = primData.ProfileHollow;
objectData.PathRadiusOffset = primData.PathRadiusOffset; objectData.PathRadiusOffset = primData.PathRadiusOffset;
objectData.PathRevolutions = primData.PathRevolutions; objectData.PathRevolutions = primData.PathRevolutions;

View File

@ -22,8 +22,18 @@ namespace OpenSim.Region.Environment.Scenes
private Dictionary<LLUUID, InventoryItem> inventoryItems; private Dictionary<LLUUID, InventoryItem> inventoryItems;
private string description = ""; private string description = "";
public string SitName = "";
public string TouchName = "";
public string Text = "";
public LLUUID CreatorID;
public LLUUID OwnerID; public LLUUID OwnerID;
public LLUUID LastOwnerID;
public Int32 CreationDate; public Int32 CreationDate;
public uint ParentID = 0;
public uint OwnerMask = FULL_MASK_PERMISSIONS; public uint OwnerMask = FULL_MASK_PERMISSIONS;
public uint NextOwnerMask = FULL_MASK_PERMISSIONS; public uint NextOwnerMask = FULL_MASK_PERMISSIONS;
public uint GroupMask = FULL_MASK_PERMISSIONS; public uint GroupMask = FULL_MASK_PERMISSIONS;
@ -32,9 +42,9 @@ namespace OpenSim.Region.Environment.Scenes
private PrimitiveBaseShape m_Shape; private PrimitiveBaseShape m_Shape;
private SceneObject m_RootParent; public SceneObject m_RootParent;
private bool isRootPrim; public bool isRootPrim;
private EntityBase m_Parent; public EntityBase m_Parent;
public override LLVector3 Pos public override LLVector3 Pos
{ {
@ -51,7 +61,7 @@ namespace OpenSim.Region.Environment.Scenes
} }
set set
{ {
this.m_pos = value - m_Parent.Pos; //should we being subtracting the parent position this.m_pos = m_Parent.Pos - value; //should we being subtracting the parent position
} }
} }
@ -108,6 +118,8 @@ namespace OpenSim.Region.Environment.Scenes
{ {
this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
this.OwnerID = ownerID; this.OwnerID = ownerID;
this.CreatorID = this.OwnerID;
this.LastOwnerID = LLUUID.Zero;
this.Pos = addPacket.ObjectData.RayEnd; this.Pos = addPacket.ObjectData.RayEnd;
this.uuid = LLUUID.Random(); this.uuid = LLUUID.Random();
this.m_localId = (uint)(localID); this.m_localId = (uint)(localID);
@ -128,7 +140,6 @@ namespace OpenSim.Region.Environment.Scenes
pShape.Scale = addPacket.ObjectData.Scale; pShape.Scale = addPacket.ObjectData.Scale;
pShape.PathCurve = addPacket.ObjectData.PathCurve; pShape.PathCurve = addPacket.ObjectData.PathCurve;
pShape.ProfileCurve = addPacket.ObjectData.ProfileCurve; pShape.ProfileCurve = addPacket.ObjectData.ProfileCurve;
pShape.ParentID = 0;
pShape.ProfileHollow = addPacket.ObjectData.ProfileHollow; pShape.ProfileHollow = addPacket.ObjectData.ProfileHollow;
pShape.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset; pShape.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
pShape.PathRevolutions = addPacket.ObjectData.PathRevolutions; pShape.PathRevolutions = addPacket.ObjectData.PathRevolutions;
@ -142,7 +153,37 @@ namespace OpenSim.Region.Environment.Scenes
public void AddToChildren(SceneObject linkObject) public void AddToChildren(SceneObject linkObject)
{ {
// Console.WriteLine("linking new prims " + linkObject.rootLocalID + " to me (" + this.LocalId + ")");
//TODO check permissions
this.children.Add(linkObject.rootPrimitive);
linkObject.rootPrimitive.SetNewParent(this, this.m_RootParent);
this.m_world.DeleteEntity(linkObject.rootUUID);
linkObject.rootPrimitive = null;
}
public void SetNewParent(Primitive newParent, SceneObject rootParent)
{
LLVector3 oldPos = new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z);
//Console.WriteLine("have a new parent and my old position is " + this.Pos.X + " , " + this.Pos.Y + " , " + this.Pos.Z);
this.isRootPrim = false;
this.m_Parent = newParent;
this.ParentID = newParent.LocalId;
this.SetRootParent(rootParent);
// Console.WriteLine("have a new parent and its position is " + this.m_Parent.Pos.X + " , " + this.m_Parent.Pos.Y + " , " + this.m_Parent.Pos.Z);
this.Pos = oldPos;
// Console.WriteLine("have a new parent so my new offset position is " + this.Pos.X + " , " + this.Pos.Y + " , " + this.Pos.Z);
this.updateFlag = 1;
}
public void SetRootParent(SceneObject newRoot)
{
this.m_RootParent = newRoot;
foreach (Primitive child in children)
{
child.SetRootParent(newRoot);
}
} }
/// <summary> /// <summary>
@ -187,7 +228,7 @@ namespace OpenSim.Region.Environment.Scenes
LLVector3 lPos; LLVector3 lPos;
lPos = this.Pos; lPos = this.Pos;
remoteClient.SendPrimitiveToClient2(this.m_regionHandle, 64096, this.LocalId, this.m_Shape, lPos, new LLUUID("00000000-0000-0000-9999-000000000005"), this.flags, this.uuid, this.OwnerID); remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.m_Shape, lPos, new LLUUID("00000000-0000-0000-9999-000000000005"), this.flags, this.uuid, this.OwnerID, this.Text, this.ParentID);
} }
/// <summary> /// <summary>

View File

@ -193,8 +193,41 @@ namespace OpenSim.Region.Environment.Scenes
/// <param name="childPrims"></param> /// <param name="childPrims"></param>
public void LinkObjects(uint parentPrim, List<uint> childPrims) public void LinkObjects(uint parentPrim, List<uint> childPrims)
{ {
SceneObject parenPrim = null;
foreach (EntityBase ent in Entities.Values)
{
if (ent is SceneObject)
{
if (((SceneObject)ent).rootLocalID == parentPrim)
{
parenPrim = (SceneObject)ent;
break;
}
}
}
List<SceneObject> children = new List<SceneObject>();
if (parenPrim != null)
{
for (int i = 0; i < childPrims.Count; i++)
{
foreach (EntityBase ent in Entities.Values)
{
if (ent is SceneObject)
{
if (((SceneObject)ent).rootLocalID == childPrims[i])
{
children.Add((SceneObject)ent);
}
}
}
}
}
foreach (SceneObject sceneObj in children)
{
parenPrim.AddNewChildPrims(sceneObj);
}
} }
/// <summary> /// <summary>
@ -275,7 +308,10 @@ namespace OpenSim.Region.Environment.Scenes
{ {
if (this.Entities.ContainsKey(objectID)) if (this.Entities.ContainsKey(objectID))
{ {
((PrimitiveOld)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient); if (this.Entities[objectID] is SceneObject)
{
((SceneObject)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient);
}
} }
} }

View File

@ -461,10 +461,11 @@ namespace OpenSim.Region.Environment.Scenes
client.OnRequestMapBlocks += this.RequestMapBlocks; client.OnRequestMapBlocks += this.RequestMapBlocks;
client.OnTeleportLocationRequest += this.RequestTeleportLocation; client.OnTeleportLocationRequest += this.RequestTeleportLocation;
client.OnObjectSelect += this.SelectPrim; client.OnObjectSelect += this.SelectPrim;
// client.OnGrapUpdate += this.MoveObject; client.OnGrapUpdate += this.MoveObject;
client.OnNameFromUUIDRequest += this.commsManager.HandleUUIDNameRequest; client.OnNameFromUUIDRequest += this.commsManager.HandleUUIDNameRequest;
client.OnObjectDescription += this.PrimDescription; client.OnObjectDescription += this.PrimDescription;
client.OnObjectName += this.PrimName; client.OnObjectName += this.PrimName;
client.OnLinkObjects += this.LinkObjects;
/* remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest); /* remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest);
remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest); remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest);
@ -585,6 +586,21 @@ namespace OpenSim.Region.Environment.Scenes
#endregion #endregion
/// <summary>
///
/// </summary>
/// <param name="entID"></param>
/// <returns></returns>
public bool DeleteEntity(LLUUID entID)
{
if (this.Entities.ContainsKey(entID))
{
this.Entities.Remove(entID);
return true;
}
return false;
}
#region RegionCommsHost #region RegionCommsHost
/// <summary> /// <summary>

View File

@ -41,7 +41,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
private System.Text.Encoding enc = System.Text.Encoding.ASCII; private System.Text.Encoding enc = System.Text.Encoding.ASCII;
private Dictionary<LLUUID, Primitive> ChildPrimitives = new Dictionary<LLUUID, Primitive>(); //list of all primitive id's that are part of this group private Dictionary<LLUUID, Primitive> ChildPrimitives = new Dictionary<LLUUID, Primitive>(); //list of all primitive id's that are part of this group
protected Primitive rootPrimitive; public Primitive rootPrimitive;
private Scene m_world; private Scene m_world;
protected ulong m_regionHandle; protected ulong m_regionHandle;
@ -99,6 +99,16 @@ namespace OpenSim.Region.Environment.Scenes
} }
/// <summary>
///
/// </summary>
/// <param name="primObject"></param>
public void AddNewChildPrims(SceneObject primObject)
{
this.rootPrimitive.AddToChildren(primObject);
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -145,6 +155,7 @@ namespace OpenSim.Region.Environment.Scenes
public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
{ {
this.Pos = pos; this.Pos = pos;
this.rootPrimitive.Pos = pos;
this.rootPrimitive.SendTerseUpdateForAllChildren(remoteClient); this.rootPrimitive.SendTerseUpdateForAllChildren(remoteClient);
} }
@ -161,17 +172,17 @@ namespace OpenSim.Region.Environment.Scenes
proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock(); proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
proper.ObjectData[0].ItemID = LLUUID.Zero; proper.ObjectData[0].ItemID = LLUUID.Zero;
proper.ObjectData[0].CreationDate = (ulong)this.rootPrimitive.CreationDate; proper.ObjectData[0].CreationDate = (ulong)this.rootPrimitive.CreationDate;
proper.ObjectData[0].CreatorID = this.rootPrimitive.OwnerID; proper.ObjectData[0].CreatorID = this.rootPrimitive.CreatorID;
proper.ObjectData[0].FolderID = LLUUID.Zero; proper.ObjectData[0].FolderID = LLUUID.Zero;
proper.ObjectData[0].FromTaskID = LLUUID.Zero; proper.ObjectData[0].FromTaskID = LLUUID.Zero;
proper.ObjectData[0].GroupID = LLUUID.Zero; proper.ObjectData[0].GroupID = LLUUID.Zero;
proper.ObjectData[0].InventorySerial = 0; proper.ObjectData[0].InventorySerial = 0;
proper.ObjectData[0].LastOwnerID = LLUUID.Zero; proper.ObjectData[0].LastOwnerID = this.rootPrimitive.LastOwnerID;
proper.ObjectData[0].ObjectID = this.rootUUID; proper.ObjectData[0].ObjectID = this.rootUUID;
proper.ObjectData[0].OwnerID = this.rootPrimitive.OwnerID; proper.ObjectData[0].OwnerID = this.rootPrimitive.OwnerID;
proper.ObjectData[0].TouchName = new byte[0]; proper.ObjectData[0].TouchName = enc.GetBytes(this.rootPrimitive.TouchName + "\0");
proper.ObjectData[0].TextureID = new byte[0]; proper.ObjectData[0].TextureID = new byte[0];
proper.ObjectData[0].SitName = new byte[0]; proper.ObjectData[0].SitName = enc.GetBytes(this.rootPrimitive.SitName +"\0") ;
proper.ObjectData[0].Name = enc.GetBytes(this.rootPrimitive.Name +"\0"); proper.ObjectData[0].Name = enc.GetBytes(this.rootPrimitive.Name +"\0");
proper.ObjectData[0].Description = enc.GetBytes(this.rootPrimitive.Description +"\0"); proper.ObjectData[0].Description = enc.GetBytes(this.rootPrimitive.Description +"\0");
proper.ObjectData[0].OwnerMask = this.rootPrimitive.OwnerMask; proper.ObjectData[0].OwnerMask = this.rootPrimitive.OwnerMask;