123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- /*
- * Copyright (c) Contributors, http://www.openmetaverse.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSim Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- using System.Collections.Generic;
- using System.Text;
- using libsecondlife;
- using libsecondlife.Packets;
- using OpenSim.Framework.Interfaces;
- using OpenSim.Physics.Manager;
- namespace OpenSim.Region.Environment.Scenes
- {
- public class SceneObject : EntityBase
- {
- private Encoding enc = Encoding.ASCII;
- private Dictionary<LLUUID, Primitive> ChildPrimitives = new Dictionary<LLUUID, Primitive>(); //list of all primitive id's that are part of this group
- public Primitive rootPrimitive;
- private new Scene m_world;
- protected ulong m_regionHandle;
- private bool physicsEnabled = false;
- private PhysicsScene m_PhysScene;
- private PhysicsActor m_PhysActor;
-
- public LLUUID rootUUID
- {
- get
- {
- this.uuid = this.rootPrimitive.uuid;
- return this.uuid;
- }
- }
- public uint rootLocalID
- {
- get
- {
- this.m_localId = this.rootPrimitive.LocalId;
- return this.LocalId;
- }
- }
- /// <summary>
- ///
- /// </summary>
- public SceneObject(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
- {
- m_regionHandle = regionHandle;
- m_world = world;
- this.Pos = addPacket.ObjectData.RayEnd;
- this.CreateRootFromPacket(addPacket, ownerID, localID);
- }
- /// <summary>
- ///
- /// </summary>
- /// <remarks>Need a null constructor for duplication</remarks>
- public SceneObject()
- {
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="addPacket"></param>
- /// <param name="agentID"></param>
- /// <param name="localID"></param>
- public void CreateRootFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID)
- {
- this.rootPrimitive = new Primitive( this.m_regionHandle, this.m_world, addPacket, agentID, localID, true, this, this);
- this.children.Add(rootPrimitive);
- this.ChildPrimitives.Add(this.rootUUID, this.rootPrimitive);
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="data"></param>
- public void CreateFromBytes(byte[] data)
- {
- }
- /// <summary>
- ///
- /// </summary>
- /// <returns>A complete copy of the object</returns>
- public SceneObject Copy()
- {
- SceneObject dupe = new SceneObject();
- Primitive newRoot = this.rootPrimitive.Copy((EntityBase)dupe, dupe);
- foreach (EntityBase child in this.children)
- {
- EntityBase newChild = child.Copy();
- dupe.children.Add(newChild);
- }
- return dupe;
- }
- /// <summary>
- ///
- /// </summary>
- public void DeleteAllChildren()
- {
- this.children.Clear();
- this.ChildPrimitives.Clear();
- this.rootPrimitive = null;
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="primObject"></param>
- public void AddNewChildPrims(SceneObject primObject)
- {
- this.rootPrimitive.AddNewChildren(primObject);
- }
- public void AddChildToList(Primitive prim)
- {
- if (!this.ChildPrimitives.ContainsKey(prim.uuid))
- {
- this.ChildPrimitives.Add(prim.uuid, prim);
- }
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="primID"></param>
- /// <returns></returns>
- public Primitive HasChildPrim(LLUUID primID)
- {
- if (this.ChildPrimitives.ContainsKey(primID))
- {
- return this.ChildPrimitives[primID];
- }
- return null;
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="localID"></param>
- /// <returns></returns>
- public Primitive HasChildPrim(uint localID)
- {
- Primitive returnPrim = null;
- foreach (Primitive prim in this.ChildPrimitives.Values)
- {
- if (prim.LocalId == localID)
- {
- returnPrim = prim;
- break;
- }
- }
- return returnPrim;
- }
- public void SendAllChildPrimsToClient(IClientAPI client)
- {
- this.rootPrimitive.SendFullUpdateForAllChildren(client);
- }
- /// <summary>
- ///
- /// </summary>
- public override void BackUp()
- {
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="offset"></param>
- /// <param name="pos"></param>
- /// <param name="remoteClient"></param>
- public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
- {
- this.rootPrimitive.Pos = pos ;
- this.rootPrimitive.SendTerseUpdateForAllChildren(remoteClient);
- }
- /// <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.rootPrimitive.CreationDate;
- proper.ObjectData[0].CreatorID = this.rootPrimitive.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.rootPrimitive.LastOwnerID;
- proper.ObjectData[0].ObjectID = this.rootUUID;
- proper.ObjectData[0].OwnerID = this.rootPrimitive.OwnerID;
- proper.ObjectData[0].TouchName = enc.GetBytes(this.rootPrimitive.TouchName + "\0");
- proper.ObjectData[0].TextureID = 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].Description = enc.GetBytes(this.rootPrimitive.Description +"\0");
- proper.ObjectData[0].OwnerMask = this.rootPrimitive.OwnerMask;
- proper.ObjectData[0].NextOwnerMask = this.rootPrimitive.NextOwnerMask;
- proper.ObjectData[0].GroupMask = this.rootPrimitive.GroupMask;
- proper.ObjectData[0].EveryoneMask = this.rootPrimitive.EveryoneMask;
- proper.ObjectData[0].BaseMask = this.rootPrimitive.BaseMask;
- client.OutPacket(proper);
- }
- }
- }
|