More testing some ideas, to find best method for SceneObject Primitive classes.

afrisby
MW 2007-07-18 18:12:16 +00:00
parent e78a0ac886
commit 643a02ec60
7 changed files with 513 additions and 232 deletions

View File

@ -180,8 +180,6 @@ namespace OpenSim.Framework.Interfaces
void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity); void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity);
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, LLUUID textureID, uint flags);
void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID);
void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, 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

@ -1,129 +0,0 @@
using System.Collections.Generic;
using System.Net;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Framework.Data;
using libsecondlife;
using libsecondlife.Packets;
namespace OpenSim.Framework
{
public class NpcClientBase : IClientAPI
{
#pragma warning disable 67
public event ImprovedInstantMessage OnInstantMessage;
public event ChatFromViewer OnChatFromViewer;
public event RezObject OnRezObject;
public event ModifyTerrain OnModifyTerrain;
public event SetAppearance OnSetAppearance;
public event StartAnim OnStartAnim;
public event LinkObjects OnLinkObjects;
public event RequestMapBlocks OnRequestMapBlocks;
public event TeleportLocationRequest OnTeleportLocationRequest;
public event GenericCall4 OnDeRezObject;
public event GenericCall OnRegionHandShakeReply;
public event GenericCall OnRequestWearables;
public event GenericCall2 OnCompleteMovementToRegion;
public event UpdateAgent OnAgentUpdate;
public event GenericCall OnRequestAvatarsData;
public event AddNewPrim OnAddPrim;
public event ObjectDuplicate OnObjectDuplicate;
public event UpdateVector OnGrapObject;
public event ObjectSelect OnDeGrapObject;
public event MoveObject OnGrapUpdate;
public event UpdateShape OnUpdatePrimShape;
public event ObjectSelect OnObjectSelect;
public event GenericCall7 OnObjectDescription;
public event GenericCall7 OnObjectName;
public event UpdatePrimFlags OnUpdatePrimFlags;
public event UpdatePrimTexture OnUpdatePrimTexture;
public event UpdateVector OnUpdatePrimGroupPosition;
public event UpdateVector OnUpdatePrimSinglePosition;
public event UpdatePrimRotation OnUpdatePrimGroupRotation;
public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation;
public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation;
public event UpdateVector OnUpdatePrimScale;
public event StatusChange OnChildAgentStatus;
public event GenericCall2 OnStopMovement;
public event NewAvatar OnNewAvatar;
public event GenericCall6 OnRemoveAvatar;
public event UUIDNameRequest OnNameFromUUIDRequest;
public event ParcelPropertiesRequest OnParcelPropertiesRequest;
public event ParcelDivideRequest OnParcelDivideRequest;
public event ParcelJoinRequest OnParcelJoinRequest;
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
public event ParcelSelectObjects OnParcelSelectObjects;
public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
public event ObjectDeselect OnObjectDeselect;
public event EstateOwnerMessageRequest OnEstateOwnerMessage;
#pragma warning restore 67
public virtual LLVector3 StartPos
{
get { return new LLVector3(); }
set { }
}
public virtual LLUUID AgentId
{
get { return LLUUID.Random(); }
}
public virtual string FirstName
{
get { return ""; }
}
public virtual string LastName
{
get { return ""; }
}
public NpcClientBase()
{
}
public virtual void OutPacket(Packet newPack){}
public virtual void SendWearables(AvatarWearable[] wearables){}
public virtual void SendStartPingCheck(byte seq){}
public virtual void SendKillObject(ulong regionHandle, uint avatarLocalID){}
public virtual void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId){}
public virtual void SendRegionHandshake(RegionInfo regionInfo){}
public virtual void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID){}
public virtual void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID){}
public virtual void SendInstantMessage(string message, LLUUID target, string fromName){}
public virtual void SendLayerData(float[] map){}
public virtual void SendLayerData(int px, int py, float[] map){}
public virtual void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look){}
public virtual void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourExternalEndPoint){}
public virtual AgentCircuitData RequestClientInfo() { return new AgentCircuitData(); }
public virtual void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, IPEndPoint newRegionExternalEndPoint){}
public virtual void SendMapBlock(List<MapBlockData> mapBlocks){}
public virtual void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags){}
public virtual void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint, uint locationID, uint flags){}
public virtual void SendTeleportCancel(){}
public virtual void SendTeleportLocationStart(){}
public virtual void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance){}
public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos, byte[] textureEntry){}
public virtual void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity){}
public virtual void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint){}
public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags){}
public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags){}
public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID){}
public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID){}
public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation){}
public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items){}
public virtual void SendInventoryItemDetails(LLUUID ownerID, LLUUID folderID, InventoryItemBase item){}
public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname){}
}
}

View File

@ -65,7 +65,7 @@ namespace OpenSim.Framework.Types
} }
//void returns need to change of course //void returns need to change of course
public void GetMesh() public virtual void GetMesh()
{ {
} }

View File

@ -719,56 +719,7 @@ namespace OpenSim.Region.ClientStack
this.OutPacket(attach); this.OutPacket(attach);
} }
/// <summary>
/// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive
/// or big changes to a existing primitive.
/// </summary>
/// <param name="regionHandle"></param>
/// <param name="timeDilation"></param>
/// <param name="localID"></param>
/// <param name="primData"></param>
/// <param name="pos"></param>
/// <param name="rotation"></param>
/// <param name="textureID"></param>
public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags)
{
ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
outPacket.RegionData.RegionHandle = regionHandle;
outPacket.RegionData.TimeDilation = timeDilation;
outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID, flags);
outPacket.ObjectData[0].ID = localID;
outPacket.ObjectData[0].FullID = primData.FullID;
byte[] pb = pos.GetBytes();
Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
byte[] rot = rotation.GetBytes();
Array.Copy(rot, 0, outPacket.ObjectData[0].ObjectData, 48, rot.Length);
OutPacket(outPacket);
}
/// <summary>
/// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive
/// or big changes to a existing primitive.
/// Uses default rotation
/// </summary>
/// <param name="primData"></param>
/// <param name="pos"></param>
public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags)
{
ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
outPacket.RegionData.RegionHandle = regionHandle;
outPacket.RegionData.TimeDilation = timeDilation;
outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID, flags);
outPacket.ObjectData[0].ID = localID;
outPacket.ObjectData[0].FullID = primData.FullID;
byte[] pb = pos.GetBytes();
Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
OutPacket(outPacket);
}
public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID) public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID)
{ {
ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
@ -978,22 +929,6 @@ namespace OpenSim.Region.ClientStack
return dat; return dat;
} }
/// <summary>
/// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive)
/// </summary>
/// <param name="primData"></param>
/// <returns></returns>
protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimData primData, LLUUID textureID, uint flags)
{
ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock();
this.SetDefaultPrimPacketValues(objupdate);
objupdate.UpdateFlags = flags;
this.SetPrimPacketShapeData(objupdate, primData, textureID);
return objupdate;
}
/// <summary> /// <summary>
/// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive)
/// </summary> /// </summary>
@ -1009,40 +944,6 @@ namespace OpenSim.Region.ClientStack
return objupdate; return objupdate;
} }
/// <summary>
/// Copy the data from a PrimData object to a ObjectUpdatePacket
/// </summary>
/// <param name="objectData"></param>
/// <param name="primData"></param>
protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimData primData, LLUUID textureID)
{
LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID);
objectData.TextureEntry = ntex.ToBytes();
objectData.OwnerID = primData.OwnerID;
objectData.ParentID = primData.ParentID;
objectData.PCode = primData.PCode;
objectData.PathBegin = primData.PathBegin;
objectData.PathEnd = primData.PathEnd;
objectData.PathScaleX = primData.PathScaleX;
objectData.PathScaleY = primData.PathScaleY;
objectData.PathShearX = primData.PathShearX;
objectData.PathShearY = primData.PathShearY;
objectData.PathSkew = primData.PathSkew;
objectData.ProfileBegin = primData.ProfileBegin;
objectData.ProfileEnd = primData.ProfileEnd;
objectData.Scale = primData.Scale;
objectData.PathCurve = primData.PathCurve;
objectData.ProfileCurve = primData.ProfileCurve;
objectData.ProfileHollow = primData.ProfileHollow;
objectData.PathRadiusOffset = primData.PathRadiusOffset;
objectData.PathRevolutions = primData.PathRevolutions;
objectData.PathTaperX = primData.PathTaperX;
objectData.PathTaperY = primData.PathTaperY;
objectData.PathTwist = primData.PathTwist;
objectData.PathTwistBegin = primData.PathTwistBegin;
}
protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimitiveBaseShape primData) protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimitiveBaseShape primData)
{ {

View File

@ -218,6 +218,7 @@ namespace OpenSim.Region.ClientStack
if (OnAddPrim != null) if (OnAddPrim != null)
{ {
ObjectAddPacket addPacket = (ObjectAddPacket) Pack ; ObjectAddPacket addPacket = (ObjectAddPacket) Pack ;
Console.WriteLine(addPacket.ToString());
PrimitiveBaseShape shape = new PrimitiveBaseShape(); PrimitiveBaseShape shape = new PrimitiveBaseShape();

View File

@ -0,0 +1,299 @@
using System.Collections.Generic;
using System.Text;
using Axiom.Math;
using libsecondlife;
using libsecondlife.Packets;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Physics.Manager;
namespace OpenSim.Region.Environment.Scenes
{
// public delegate void PrimCountTaintedDelegate();
public class AllNewSceneObjectGroup2 : EntityBase
{
private Encoding enc = Encoding.ASCII;
protected AllNewSceneObjectPart2 m_rootPart;
protected Dictionary<LLUUID, AllNewSceneObjectPart2> m_parts = new Dictionary<LLUUID, AllNewSceneObjectPart2>();
public event PrimCountTaintedDelegate OnPrimCountTainted;
/// <summary>
///
/// </summary>
public int primCount
{
get
{
return 1;
}
}
/// <summary>
///
/// </summary>
public LLVector3 GroupCentrePoint
{
get
{
return new LLVector3(0, 0, 0);
}
}
/// <summary>
///
/// </summary>
public AllNewSceneObjectGroup2()
{
}
/// <summary>
///
/// </summary>
public void FlagGroupForFullUpdate()
{
}
/// <summary>
///
/// </summary>
public void FlagGroupForTerseUpdate()
{
}
/// <summary>
///
/// </summary>
/// <param name="objectGroup"></param>
public void LinkToGroup(AllNewSceneObjectGroup2 objectGroup)
{
}
/// <summary>
///
/// </summary>
/// <param name="primID"></param>
/// <returns></returns>
private AllNewSceneObjectPart2 GetChildPrim(LLUUID primID)
{
AllNewSceneObjectPart2 childPart = null;
if (this.m_parts.ContainsKey(primID))
{
childPart = this.m_parts[primID];
}
return childPart;
}
/// <summary>
///
/// </summary>
/// <param name="localID"></param>
/// <returns></returns>
private AllNewSceneObjectPart2 GetChildPrim(uint localID)
{
foreach (AllNewSceneObjectPart2 part in this.m_parts.Values)
{
if (part.m_localID == localID)
{
return part;
}
}
return null;
}
public void TriggerTainted()
{
if (OnPrimCountTainted != null)
{
this.OnPrimCountTainted();
}
}
/// <summary>
///
/// </summary>
/// <param name="offset"></param>
/// <param name="pos"></param>
/// <param name="remoteClient"></param>
public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
{
this.Pos = pos;
}
/// <summary>
///
/// </summary>
/// <param name="client"></param>
public void GetProperites(IClientAPI client)
{
ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
proper.ObjectData[0].ItemID = LLUUID.Zero;
proper.ObjectData[0].CreationDate = (ulong)this.m_rootPart.CreationDate;
proper.ObjectData[0].CreatorID = this.m_rootPart.CreatorID;
proper.ObjectData[0].FolderID = LLUUID.Zero;
proper.ObjectData[0].FromTaskID = LLUUID.Zero;
proper.ObjectData[0].GroupID = LLUUID.Zero;
proper.ObjectData[0].InventorySerial = 0;
proper.ObjectData[0].LastOwnerID = this.m_rootPart.LastOwnerID;
proper.ObjectData[0].ObjectID = this.m_uuid;
proper.ObjectData[0].OwnerID = this.m_rootPart.OwnerID;
proper.ObjectData[0].TouchName = enc.GetBytes(this.m_rootPart.TouchName + "\0");
proper.ObjectData[0].TextureID = new byte[0];
proper.ObjectData[0].SitName = enc.GetBytes(this.m_rootPart.SitName + "\0");
proper.ObjectData[0].Name = enc.GetBytes(this.m_rootPart.Name + "\0");
proper.ObjectData[0].Description = enc.GetBytes(this.m_rootPart.Description + "\0");
proper.ObjectData[0].OwnerMask = this.m_rootPart.OwnerMask;
proper.ObjectData[0].NextOwnerMask = this.m_rootPart.NextOwnerMask;
proper.ObjectData[0].GroupMask = this.m_rootPart.GroupMask;
proper.ObjectData[0].EveryoneMask = this.m_rootPart.EveryoneMask;
proper.ObjectData[0].BaseMask = this.m_rootPart.BaseMask;
client.OutPacket(proper);
}
#region Shape
/// <summary>
///
/// </summary>
/// <param name="shapeBlock"></param>
public void UpdateShape(ObjectShapePacket.ObjectDataBlock shapeBlock, uint localID)
{
AllNewSceneObjectPart2 part = this.GetChildPrim(localID);
if (part != null)
{
part.UpdateShape(shapeBlock);
}
}
#endregion
#region Position
public void UpdateGroupPosition(LLVector3 pos)
{
this.m_pos = pos;
}
public void UpdateSinglePosition(LLVector3 pos, uint localID)
{
AllNewSceneObjectPart2 part = this.GetChildPrim(localID);
if (part != null)
{
if (part.uuid == this.m_rootPart.uuid)
{
this.UpdateRootPosition(pos);
}
else
{
part.UpdateOffSet(pos);
}
}
}
private void UpdateRootPosition(LLVector3 pos)
{
LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z);
LLVector3 oldPos = new LLVector3(this.Pos.X + this.m_rootPart.OffsetPosition.X, this.Pos.Y + this.m_rootPart.OffsetPosition.Y, this.Pos.Z + this.m_rootPart.OffsetPosition.Z);
LLVector3 diff = oldPos - newPos;
Axiom.Math.Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z);
Axiom.Math.Quaternion partRotation = new Quaternion(this.m_rootPart.RotationOffset.W, this.m_rootPart.RotationOffset.X, this.m_rootPart.RotationOffset.Y, this.m_rootPart.RotationOffset.Z);
axDiff = partRotation.Inverse() * axDiff;
diff.X = axDiff.x;
diff.Y = axDiff.y;
diff.Z = axDiff.z;
foreach (AllNewSceneObjectPart2 obPart in this.m_parts.Values)
{
if (obPart.uuid != this.m_rootPart.uuid)
{
obPart.OffsetPosition = obPart.OffsetPosition + diff;
}
}
this.Pos = newPos;
pos.X = newPos.X;
pos.Y = newPos.Y;
pos.Z = newPos.Z;
}
#endregion
#region Roation
public void UpdateGroupRotation(LLQuaternion rot)
{
this.m_rootPart.RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W);
}
/// <summary>
///
/// </summary>
/// <param name="pos"></param>
/// <param name="rot"></param>
public void UpdateGroupMouseRotation(LLVector3 pos, LLQuaternion rot)
{
this.m_rootPart.RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W);
this.m_pos = pos;
}
public void UpdateSingleRotation(LLQuaternion rot, uint localID)
{
AllNewSceneObjectPart2 part = this.GetChildPrim(localID);
if (part != null)
{
if (part.uuid == this.m_rootPart.uuid)
{
this.UpdateRootRotation(rot);
}
else
{
part.UpdateRotation(rot);
}
}
}
private void UpdateRootRotation(LLQuaternion rot)
{
this.m_rootPart.UpdateRotation(rot);
Axiom.Math.Quaternion axRot = new Quaternion(rot.W, rot.X, rot.Y, rot.Z);
Axiom.Math.Quaternion oldParentRot = new Quaternion(this.m_rootPart.RotationOffset.W, this.m_rootPart.RotationOffset.X, this.m_rootPart.RotationOffset.Y, this.m_rootPart.RotationOffset.Z);
foreach (AllNewSceneObjectPart2 prim in this.m_parts.Values)
{
if (prim.uuid != this.m_rootPart.uuid)
{
Vector3 axPos = new Vector3(prim.OffsetPosition.X, prim.OffsetPosition.Y, prim.OffsetPosition.Z);
axPos = oldParentRot * axPos;
axPos = axRot.Inverse() * axPos;
prim.OffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z);
Axiom.Math.Quaternion primsRot = new Quaternion(prim.RotationOffset.W, prim.RotationOffset.X, prim.RotationOffset.Y, prim.RotationOffset.Z);
Axiom.Math.Quaternion newRot = oldParentRot * primsRot;
newRot = axRot.Inverse() * newRot;
prim.RotationOffset = new LLQuaternion(newRot.w, newRot.x, newRot.y, newRot.z);
}
}
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="part"></param>
private void SetPartAsRoot(AllNewSceneObjectPart2 part)
{
this.m_rootPart = part;
this.m_uuid = part.uuid;
this.m_localId = part.m_localID;
}
/// <summary>
///
/// </summary>
/// <param name="part"></param>
private void SetPartAsNonRoot(AllNewSceneObjectPart2 part)
{
}
}
}

View File

@ -0,0 +1,211 @@
using System.Collections.Generic;
using System.Text;
using System;
using Axiom.Math;
using libsecondlife;
using libsecondlife.Packets;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
namespace OpenSim.Region.Environment.Scenes
{
public class AllNewSceneObjectPart2
{
private const uint FULL_MASK_PERMISSIONS = 2147483647;
private ulong m_regionHandle;
private uint m_flags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456 + 128;
//private Dictionary<LLUUID, InventoryItem> inventoryItems;
public string SitName = "";
public string TouchName = "";
public string Text = "";
public LLUUID CreatorID;
public LLUUID OwnerID;
public LLUUID LastOwnerID;
public Int32 CreationDate;
public LLUUID uuid;
public uint m_localID;
public uint ParentID = 0;
public uint OwnerMask = FULL_MASK_PERMISSIONS;
public uint NextOwnerMask = FULL_MASK_PERMISSIONS;
public uint GroupMask = FULL_MASK_PERMISSIONS;
public uint EveryoneMask = FULL_MASK_PERMISSIONS;
public uint BaseMask = FULL_MASK_PERMISSIONS;
protected PrimitiveBaseShape m_Shape;
protected AllNewSceneObjectGroup2 m_parentGroup;
#region Properties
protected string m_name;
/// <summary>
///
/// </summary>
public virtual string Name
{
get { return m_name; }
set { m_name = value; }
}
protected LLVector3 m_offset;
public LLVector3 OffsetPosition
{
get
{
return m_offset;
}
set
{
m_offset = value;
}
}
protected LLQuaternion m_rotationOffset;
public LLQuaternion RotationOffset
{
get
{
return m_rotationOffset;
}
set
{
m_rotationOffset = value;
}
}
private string m_description = "";
public string Description
{
get
{
return this.m_description;
}
set
{
this.m_description = value;
}
}
public PrimitiveBaseShape Shape
{
get
{
return this.m_Shape;
}
}
public LLVector3 Scale
{
set
{
this.m_Shape.Scale = value;
}
get
{
return this.m_Shape.Scale;
}
}
#endregion
#region Constructors
public AllNewSceneObjectPart2(ulong regionHandle, AllNewSceneObjectGroup2 parent, LLUUID ownerID, uint localID, PrimitiveBaseShape shape, LLVector3 position)
{
this.m_regionHandle = regionHandle;
this.m_parentGroup = parent;
this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
this.OwnerID = ownerID;
this.CreatorID = this.OwnerID;
this.LastOwnerID = LLUUID.Zero;
this.uuid = LLUUID.Random();
this.m_localID = (uint)(localID);
this.m_Shape = shape;
this.OffsetPosition = position;
}
#endregion
#region Shape
/// <summary>
///
/// </summary>
/// <param name="shapeBlock"></param>
public void UpdateShape(ObjectShapePacket.ObjectDataBlock shapeBlock)
{
this.m_Shape.PathBegin = shapeBlock.PathBegin;
this.m_Shape.PathEnd = shapeBlock.PathEnd;
this.m_Shape.PathScaleX = shapeBlock.PathScaleX;
this.m_Shape.PathScaleY = shapeBlock.PathScaleY;
this.m_Shape.PathShearX = shapeBlock.PathShearX;
this.m_Shape.PathShearY = shapeBlock.PathShearY;
this.m_Shape.PathSkew = shapeBlock.PathSkew;
this.m_Shape.ProfileBegin = shapeBlock.ProfileBegin;
this.m_Shape.ProfileEnd = shapeBlock.ProfileEnd;
this.m_Shape.PathCurve = shapeBlock.PathCurve;
this.m_Shape.ProfileCurve = shapeBlock.ProfileCurve;
this.m_Shape.ProfileHollow = shapeBlock.ProfileHollow;
this.m_Shape.PathRadiusOffset = shapeBlock.PathRadiusOffset;
this.m_Shape.PathRevolutions = shapeBlock.PathRevolutions;
this.m_Shape.PathTaperX = shapeBlock.PathTaperX;
this.m_Shape.PathTaperY = shapeBlock.PathTaperY;
this.m_Shape.PathTwist = shapeBlock.PathTwist;
this.m_Shape.PathTwistBegin = shapeBlock.PathTwistBegin;
}
#endregion
#region Texture
/// <summary>
///
/// </summary>
/// <param name="textureEntry"></param>
public void UpdateTextureEntry(byte[] textureEntry)
{
this.m_Shape.TextureEntry = textureEntry;
}
#endregion
#region Position
/// <summary>
///
/// </summary>
/// <param name="pos"></param>
public void UpdateOffSet(LLVector3 pos)
{
LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z);
this.OffsetPosition = newPos;
}
#endregion
#region rotation
public void UpdateRotation(LLQuaternion rot)
{
this.RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W);
}
#endregion
#region Resizing/Scale
/// <summary>
///
/// </summary>
/// <param name="scale"></param>
public void Resize(LLVector3 scale)
{
LLVector3 offset = (scale - this.m_Shape.Scale);
offset.X /= 2;
offset.Y /= 2;
offset.Z /= 2;
this.OffsetPosition += offset;
this.m_Shape.Scale = scale;
}
#endregion
}
}