From 643a02ec60151e1a501d1b260592695b90be6233 Mon Sep 17 00:00:00 2001 From: MW Date: Wed, 18 Jul 2007 18:12:16 +0000 Subject: [PATCH] More testing some ideas, to find best method for SceneObject Primitive classes. --- .../General/Interfaces/IClientAPI.cs | 2 - OpenSim/Framework/General/NpcClientBase.cs | 129 -------- .../General/Types/PrimitiveBaseShape.cs | 2 +- OpenSim/Region/ClientStack/ClientView.API.cs | 101 +----- .../ClientStack/ClientView.ProcessPackets.cs | 1 + .../Scenes/AllNewSceneObjectGroup2.cs | 299 ++++++++++++++++++ .../Scenes/AllNewSceneObjectPart2.cs | 211 ++++++++++++ 7 files changed, 513 insertions(+), 232 deletions(-) delete mode 100644 OpenSim/Framework/General/NpcClientBase.cs create mode 100644 OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs create mode 100644 OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs index d58496c12e..c7e1901f8c 100644 --- a/OpenSim/Framework/General/Interfaces/IClientAPI.cs +++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs @@ -180,8 +180,6 @@ namespace OpenSim.Framework.Interfaces void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity); 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, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation); diff --git a/OpenSim/Framework/General/NpcClientBase.cs b/OpenSim/Framework/General/NpcClientBase.cs deleted file mode 100644 index 11160e4345..0000000000 --- a/OpenSim/Framework/General/NpcClientBase.cs +++ /dev/null @@ -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 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 items){} - public virtual void SendInventoryItemDetails(LLUUID ownerID, LLUUID folderID, InventoryItemBase item){} - public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname){} - } -} diff --git a/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs index 9ab6071c8b..a5822090b3 100644 --- a/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs +++ b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs @@ -65,7 +65,7 @@ namespace OpenSim.Framework.Types } //void returns need to change of course - public void GetMesh() + public virtual void GetMesh() { } diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index 044ad6863a..54ddd97d4f 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -719,56 +719,7 @@ namespace OpenSim.Region.ClientStack this.OutPacket(attach); } - /// - /// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive - /// or big changes to a existing primitive. - /// - /// - /// - /// - /// - /// - /// - /// - 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); - } - - /// - /// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive - /// or big changes to a existing primitive. - /// Uses default rotation - /// - /// - /// - 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) { ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); @@ -978,22 +929,6 @@ namespace OpenSim.Region.ClientStack return dat; } - - /// - /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) - /// - /// - /// - 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; - } - /// /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) /// @@ -1009,40 +944,6 @@ namespace OpenSim.Region.ClientStack return objupdate; } - - /// - /// Copy the data from a PrimData object to a ObjectUpdatePacket - /// - /// - /// - 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) { diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs index dd0a6c8c9c..338471e256 100644 --- a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs +++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs @@ -218,6 +218,7 @@ namespace OpenSim.Region.ClientStack if (OnAddPrim != null) { ObjectAddPacket addPacket = (ObjectAddPacket) Pack ; + Console.WriteLine(addPacket.ToString()); PrimitiveBaseShape shape = new PrimitiveBaseShape(); diff --git a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs new file mode 100644 index 0000000000..5d3a4069c0 --- /dev/null +++ b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs @@ -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 m_parts = new Dictionary(); + + public event PrimCountTaintedDelegate OnPrimCountTainted; + + /// + /// + /// + public int primCount + { + get + { + return 1; + } + } + + /// + /// + /// + public LLVector3 GroupCentrePoint + { + get + { + return new LLVector3(0, 0, 0); + } + } + + /// + /// + /// + public AllNewSceneObjectGroup2() + { + + } + + /// + /// + /// + public void FlagGroupForFullUpdate() + { + + } + + /// + /// + /// + public void FlagGroupForTerseUpdate() + { + + } + + /// + /// + /// + /// + public void LinkToGroup(AllNewSceneObjectGroup2 objectGroup) + { + + } + + /// + /// + /// + /// + /// + private AllNewSceneObjectPart2 GetChildPrim(LLUUID primID) + { + AllNewSceneObjectPart2 childPart = null; + if (this.m_parts.ContainsKey(primID)) + { + childPart = this.m_parts[primID]; + } + return childPart; + } + + /// + /// + /// + /// + /// + 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(); + } + } + + /// + /// + /// + /// + /// + /// + public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) + { + this.Pos = pos; + } + + /// + /// + /// + /// + 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 + /// + /// + /// + /// + 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); + } + + /// + /// + /// + /// + /// + 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 + /// + /// + /// + /// + private void SetPartAsRoot(AllNewSceneObjectPart2 part) + { + this.m_rootPart = part; + this.m_uuid = part.uuid; + this.m_localId = part.m_localID; + } + + /// + /// + /// + /// + private void SetPartAsNonRoot(AllNewSceneObjectPart2 part) + { + + } + } +} diff --git a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs new file mode 100644 index 0000000000..b0df4af562 --- /dev/null +++ b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs @@ -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 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; + /// + /// + /// + 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 + /// + /// + /// + /// + 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 + /// + /// + /// + /// + public void UpdateTextureEntry(byte[] textureEntry) + { + this.m_Shape.TextureEntry = textureEntry; + } + #endregion + + #region Position + /// + /// + /// + /// + 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 + /// + /// + /// + /// + 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 + } +} +