/// <summary> /// Delink the given prim from this group. The delinked prim is established as /// an independent SceneObjectGroup. /// </summary> /// <param name="partID"></param> /// <param name="sendEvents"></param> /// <returns>The object group of the newly delinked prim.</returns> public SceneObjectGroup DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents) { // m_log.DebugFormat( // "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}", // linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID); Quaternion worldRot = linkPart.GetWorldRotation(); // Remove the part from this object m_scene.SceneGraph.DeLinkPartFromEntity(this, linkPart); /* this is already done in DeLinkPartFromEntity if (m_partsList.Count == 1 && RootPart != null) //Single prim is left RootPart.LinkNum = 0; else { lock (m_partsLock) { foreach (SceneObjectPart p in m_partsList) { if (p.LinkNum > linkPart.LinkNum) p.LinkNum--; } } } */ linkPart.SetParentLocalId(0); linkPart.LinkNum = 0; if (linkPart.PhysActor != null) { m_scene.SceneGraph.PhysicsScene.RemovePrim(linkPart.PhysActor); // linkPart.PhysActor.delink(); } // We need to reset the child part's position // ready for life as a separate object after being a part of another object Quaternion parentRot = m_rootPart.RotationOffset; Vector3 axPos = linkPart.OffsetPosition; axPos *= parentRot; linkPart.SetOffsetPosition(axPos); linkPart.FixGroupPosition(AbsolutePosition + linkPart.OffsetPosition,false); linkPart.FixOffsetPosition(Vector3.Zero, false); linkPart.RotationOffset = worldRot; SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart, Scene); m_scene.SceneGraph.DelinkPartToScene(objectGroup); if (sendEvents) linkPart.TriggerScriptChangedEvent(Changed.LINK); linkPart.Rezzed = RootPart.Rezzed; //This is already set multiple places, no need to do it again //HasGroupChanged = true; //We need to send this so that we don't have issues with the client not realizing that the prims were unlinked ScheduleGroupUpdate(PrimUpdateFlags.FullUpdate); return objectGroup; }
/// <summary> /// Builds the prim from a datarecord. /// </summary> /// <param name="primRow">datarecord</param> /// <returns></returns> private static SceneObjectPart BuildPrim(IDataRecord primRow, IScene scene) { SceneObjectPart prim = new SceneObjectPart(scene); prim.UUID = new UUID((Guid)primRow["UUID"]); // explicit conversion of integers is required, which sort // of sucks. No idea if there is a shortcut here or not. prim.CreationDate = Convert.ToInt32(primRow["CreationDate"]); prim.Name = (string)primRow["Name"]; // various text fields prim.Text = (string)primRow["Text"]; prim.Color = Color.FromArgb(Convert.ToInt32(primRow["ColorA"]), Convert.ToInt32(primRow["ColorR"]), Convert.ToInt32(primRow["ColorG"]), Convert.ToInt32(primRow["ColorB"])); prim.Description = (string)primRow["Description"]; prim.SitName = (string)primRow["SitName"]; prim.TouchName = (string)primRow["TouchName"]; // permissions prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]); prim.CreatorID = new UUID((Guid)primRow["CreatorID"]); prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); prim.GroupID = new UUID((Guid)primRow["GroupID"]); prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]); prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]); prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]); prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]); prim.EveryoneMask = Convert.ToUInt32(primRow["EveryoneMask"]); prim.BaseMask = Convert.ToUInt32(primRow["BaseMask"]); // vectors prim.FixOffsetPosition ( new Vector3( Convert.ToSingle(primRow["PositionX"]), Convert.ToSingle(primRow["PositionY"]), Convert.ToSingle(primRow["PositionZ"])) ,true); prim.FixGroupPosition (new Vector3( Convert.ToSingle(primRow["GroupPositionX"]), Convert.ToSingle(primRow["GroupPositionY"]), Convert.ToSingle(primRow["GroupPositionZ"])) ,true); prim.Velocity = new Vector3( Convert.ToSingle(primRow["VelocityX"]), Convert.ToSingle(primRow["VelocityY"]), Convert.ToSingle(primRow["VelocityZ"])); prim.AngularVelocity = new Vector3( Convert.ToSingle(primRow["AngularVelocityX"]), Convert.ToSingle(primRow["AngularVelocityY"]), Convert.ToSingle(primRow["AngularVelocityZ"])); prim.Acceleration = new Vector3( Convert.ToSingle(primRow["AccelerationX"]), Convert.ToSingle(primRow["AccelerationY"]), Convert.ToSingle(primRow["AccelerationZ"])); // quaternions prim.RotationOffset = new Quaternion( Convert.ToSingle(primRow["RotationX"]), Convert.ToSingle(primRow["RotationY"]), Convert.ToSingle(primRow["RotationZ"]), Convert.ToSingle(primRow["RotationW"])); prim.SitTargetPositionLL = new Vector3( Convert.ToSingle(primRow["SitTargetOffsetX"]), Convert.ToSingle(primRow["SitTargetOffsetY"]), Convert.ToSingle(primRow["SitTargetOffsetZ"])); prim.SitTargetOrientationLL = new Quaternion( Convert.ToSingle(primRow["SitTargetOrientX"]), Convert.ToSingle(primRow["SitTargetOrientY"]), Convert.ToSingle(primRow["SitTargetOrientZ"]), Convert.ToSingle(primRow["SitTargetOrientW"])); prim.PayPrice[0] = Convert.ToInt32(primRow["PayPrice"]); prim.PayPrice[1] = Convert.ToInt32(primRow["PayButton1"]); prim.PayPrice[2] = Convert.ToInt32(primRow["PayButton2"]); prim.PayPrice[3] = Convert.ToInt32(primRow["PayButton3"]); prim.PayPrice[4] = Convert.ToInt32(primRow["PayButton4"]); prim.Sound = new UUID((Guid)primRow["LoopedSound"]); prim.SoundGain = Convert.ToSingle(primRow["LoopedSoundGain"]); prim.SoundFlags = 1; // If it's persisted at all, it's looped if (!(primRow["TextureAnimation"] is DBNull)) prim.TextureAnimation = (Byte[])primRow["TextureAnimation"]; if (!(primRow["ParticleSystem"] is DBNull)) prim.ParticleSystem = (Byte[])primRow["ParticleSystem"]; prim.AngularVelocity = new Vector3( Convert.ToSingle(primRow["OmegaX"]), Convert.ToSingle(primRow["OmegaY"]), Convert.ToSingle(primRow["OmegaZ"])); prim.CameraEyeOffset = new Vector3( Convert.ToSingle(primRow["CameraEyeOffsetX"]), Convert.ToSingle(primRow["CameraEyeOffsetY"]), Convert.ToSingle(primRow["CameraEyeOffsetZ"]) ); prim.CameraAtOffset = new Vector3( Convert.ToSingle(primRow["CameraAtOffsetX"]), Convert.ToSingle(primRow["CameraAtOffsetY"]), Convert.ToSingle(primRow["CameraAtOffsetZ"]) ); if (Convert.ToInt16(primRow["ForceMouselook"]) != 0) prim.ForceMouselook = (true); prim.ScriptAccessPin = Convert.ToInt32(primRow["ScriptAccessPin"]); if (Convert.ToInt16(primRow["AllowedDrop"]) != 0) prim.AllowedDrop = true; if (Convert.ToInt16(primRow["DieAtEdge"]) != 0) prim.DIE_AT_EDGE = true; prim.SalePrice = Convert.ToInt32(primRow["SalePrice"]); prim.ObjectSaleType = Convert.ToByte(primRow["SaleType"]); prim.Material = Convert.ToByte(primRow["Material"]); if (!(primRow["ClickAction"] is DBNull)) prim.ClickAction = Convert.ToByte(primRow["ClickAction"]); prim.CollisionSound = new UUID((Guid)primRow["CollisionSound"]); prim.CollisionSoundVolume = Convert.ToSingle(primRow["CollisionSoundVolume"]); prim.PassTouch = Convert.ToInt32(primRow["PassTouches"]); prim.LinkNum = Convert.ToInt32(primRow["LinkNumber"]); prim.GenericData = (string)primRow["Generic"]; if (!(primRow["MediaURL"] is System.DBNull)) prim.MediaUrl = (string)primRow["MediaURL"]; return prim; }
private static void ProcessGroupPosition(SceneObjectPart obj, XmlTextReader reader) { obj.FixGroupPosition(ReadVector(reader, "GroupPosition"),false); }
private SceneObjectPart BuildPrim(IDataReader row, Scene scene) { object[] o = new object[row.FieldCount]; row.GetValues(o); SceneObjectPart prim = new SceneObjectPart(scene); int ColorA = 0; int ColorR = 0; int ColorG = 0; int ColorB = 0; float PositionX = 0; float PositionY = 0; float PositionZ = 0; float GroupPositionX = 0; float GroupPositionY = 0; float GroupPositionZ = 0; float VelocityX = 0; float VelocityY = 0; float VelocityZ = 0; float AngularVelocityX = 0; float AngularVelocityY = 0; float AngularVelocityZ = 0; float AccelerationX = 0; float AccelerationY = 0; float AccelerationZ = 0; float RotationX = 0; float RotationY = 0; float RotationZ = 0; float RotationW = 0; float SitTargetOffsetX = 0; float SitTargetOffsetY = 0; float SitTargetOffsetZ = 0; float SitTargetOrientX = 0; float SitTargetOrientY = 0; float SitTargetOrientZ = 0; float SitTargetOrientW = 0; float OmegaX = 0; float OmegaY = 0; float OmegaZ = 0; float CameraEyeOffsetX = 0; float CameraEyeOffsetY = 0; float CameraEyeOffsetZ = 0; float CameraAtOffsetX = 0; float CameraAtOffsetY = 0; float CameraAtOffsetZ = 0; PrimitiveBaseShape s = new PrimitiveBaseShape(); float ScaleX = 0; float ScaleY = 0; float ScaleZ = 0; try { for (int i = 0; i < o.Length; i++) { string name = row.GetName(i); #region Switch switch (name) { case "UUID": prim.UUID = DBGuid.FromDB(o[i].ToString()); break; case "CreatorID": prim.CreatorID = DBGuid.FromDB(o[i].ToString()); break; case "OwnerID": prim.OwnerID = DBGuid.FromDB(o[i].ToString()); break; case "GroupID": prim.GroupID = DBGuid.FromDB(o[i].ToString()); break; case "LastOwnerID": prim.LastOwnerID = DBGuid.FromDB(o[i].ToString()); break; case "CreationDate": prim.CreationDate = Convert.ToInt32(o[i].ToString()); break; case "Name": if (!(o[i] is DBNull)) prim.Name = o[i].ToString(); break; case "Text": prim.Text = o[i].ToString(); break; case "ColorA": ColorA = Convert.ToInt32(o[i].ToString()); break; case "ColorR": ColorR = Convert.ToInt32(o[i].ToString()); break; case "ColorG": ColorG = Convert.ToInt32(o[i].ToString()); break; case "ColorB": ColorB = Convert.ToInt32(o[i].ToString()); break; case "Description": prim.Description = o[i].ToString(); break; case "SitName": prim.SitName = o[i].ToString(); break; case "TouchName": prim.TouchName = o[i].ToString(); break; case "ObjectFlags": prim.Flags = (PrimFlags)Convert.ToUInt32(o[i].ToString()); break; case "OwnerMask": prim.OwnerMask = Convert.ToUInt32(o[i].ToString()); break; case "NextOwnerMask": prim.NextOwnerMask = Convert.ToUInt32(o[i].ToString()); break; case "GroupMask": prim.GroupMask = Convert.ToUInt32(o[i].ToString()); break; case "EveryoneMask": prim.EveryoneMask = Convert.ToUInt32(o[i].ToString()); break; case "BaseMask": prim.BaseMask = Convert.ToUInt32(o[i].ToString()); break; case "PositionX": PositionX = Convert.ToSingle(o[i].ToString()); break; case "PositionY": PositionY = Convert.ToSingle(o[i].ToString()); break; case "PositionZ": PositionZ = Convert.ToSingle(o[i].ToString()); break; case "GroupPositionX": GroupPositionX = Convert.ToSingle(o[i].ToString()); break; case "GroupPositionY": GroupPositionY = Convert.ToSingle(o[i].ToString()); break; case "GroupPositionZ": GroupPositionZ = Convert.ToSingle(o[i].ToString()); break; case "VelocityX": VelocityX = Convert.ToSingle(o[i].ToString()); break; case "VelocityY": VelocityY = Convert.ToSingle(o[i].ToString()); break; case "VelocityZ": VelocityZ = Convert.ToSingle(o[i].ToString()); break; case "AngularVelocityX": AngularVelocityX = Convert.ToSingle(o[i].ToString()); break; case "AngularVelocityY": AngularVelocityY = Convert.ToSingle(o[i].ToString()); break; case "AngularVelocityZ": AngularVelocityZ = Convert.ToSingle(o[i].ToString()); break; case "AccelerationX": AccelerationX = Convert.ToSingle(o[i].ToString()); break; case "AccelerationY": AccelerationY = Convert.ToSingle(o[i].ToString()); break; case "AccelerationZ": AccelerationZ = Convert.ToSingle(o[i].ToString()); break; case "RotationX": RotationX = Convert.ToSingle(o[i].ToString()); break; case "RotationY": RotationY = Convert.ToSingle(o[i].ToString()); break; case "RotationZ": RotationZ = Convert.ToSingle(o[i].ToString()); break; case "RotationW": RotationW = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOffsetX": SitTargetOffsetX = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOffsetY": SitTargetOffsetY = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOffsetZ": SitTargetOffsetZ = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientX": SitTargetOrientX = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientY": SitTargetOrientY = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientZ": SitTargetOrientZ = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientW": SitTargetOrientW = Convert.ToSingle(o[i].ToString()); break; case "PayPrice": prim.PayPrice[0] = Convert.ToInt32(o[i].ToString()); break; case "PayButton1": prim.PayPrice[1] = Convert.ToInt32(o[i].ToString()); break; case "PayButton2": prim.PayPrice[2] = Convert.ToInt32(o[i].ToString()); break; case "PayButton3": prim.PayPrice[3] = Convert.ToInt32(o[i].ToString()); break; case "PayButton4": prim.PayPrice[4] = Convert.ToInt32(o[i].ToString()); break; case "LoopedSound": prim.Sound = DBGuid.FromDB(o[i].ToString()); break; case "LoopedSoundGain": prim.SoundGain = Convert.ToSingle(o[i].ToString()); break; case "TextureAnimation": if (!(row[i] is DBNull)) prim.TextureAnimation = (byte[])o[i]; break; case "ParticleSystem": if (!(row[i] is DBNull)) prim.ParticleSystem = (byte[])o[i]; break; case "OmegaX": OmegaX = Convert.ToSingle(o[i].ToString()); break; case "OmegaY": OmegaY = Convert.ToSingle(o[i].ToString()); break; case "OmegaZ": OmegaZ = Convert.ToSingle(o[i].ToString()); break; case "CameraEyeOffsetX": CameraEyeOffsetX = Convert.ToSingle(o[i].ToString()); break; case "CameraEyeOffsetY": CameraEyeOffsetY = Convert.ToSingle(o[i].ToString()); break; case "CameraEyeOffsetZ": CameraEyeOffsetZ = Convert.ToSingle(o[i].ToString()); break; case "CameraAtOffsetX": CameraAtOffsetX = Convert.ToSingle(o[i].ToString()); break; case "CameraAtOffsetY": CameraAtOffsetY = Convert.ToSingle(o[i].ToString()); break; case "CameraAtOffsetZ": CameraAtOffsetZ = Convert.ToSingle(o[i].ToString()); break; case "ForceMouselook": prim.ForceMouselook = Convert.ToInt32(o[i].ToString()) != 0; break; case "ScriptAccessPin": prim.ScriptAccessPin = Convert.ToInt32(o[i].ToString()); break; case "AllowedDrop": prim.AllowedDrop = Convert.ToInt32(o[i].ToString()) != 0; break; case "DieAtEdge": prim.DIE_AT_EDGE = Convert.ToInt32(o[i].ToString()) != 0; break; case "SalePrice": prim.SalePrice = Convert.ToInt32(o[i].ToString()); break; case "SaleType": prim.ObjectSaleType = Convert.ToByte(o[i].ToString()); break; case "Material": prim.Material = Convert.ToByte(o[i].ToString()); break; case "ClickAction": if (!(row[i] is DBNull)) prim.ClickAction = Convert.ToByte(o[i].ToString()); break; case "CollisionSound": prim.CollisionSound = DBGuid.FromDB(o[i].ToString()); break; case "CollisionSoundVolume": prim.CollisionSoundVolume = Convert.ToSingle(o[i].ToString()); break; case "PassTouches": prim.PassTouch = (int)Convert.ToSingle(o[i].ToString()); break; case "VolumeDetect": if (!(row[i] is DBNull)) prim.VolumeDetectActive = Convert.ToInt32(o[i].ToString()) == 1; break; case "LinkNumber": prim.LinkNum = int.Parse(o[i].ToString()); break; case "Generic": prim.GenericData = o[i].ToString(); break; case "MediaURL": if (!(o[i] is System.DBNull)) prim.MediaUrl = (string)o[i]; break; case "SceneGroupID": break; case "RegionUUID": break; case "Shape": break; case "ScaleX": ScaleX = Convert.ToSingle(o[i]); break; case "ScaleY": ScaleY = Convert.ToSingle(o[i]); break; case "ScaleZ": ScaleZ = Convert.ToSingle(o[i]); break; case "PCode": s.PCode = Convert.ToByte(o[i]); break; case "PathBegin": s.PathBegin = Convert.ToUInt16(o[i]); break; case "PathEnd": s.PathEnd = Convert.ToUInt16(o[i]); break; case "PathScaleX": s.PathScaleX = Convert.ToByte(o[i]); break; case "PathScaleY": s.PathScaleY = Convert.ToByte(o[i]); break; case "PathShearX": s.PathShearX = Convert.ToByte(o[i]); break; case "PathShearY": s.PathShearY = Convert.ToByte(o[i]); break; case "PathSkew": s.PathSkew = Convert.ToSByte(o[i]); break; case "PathCurve": s.PathCurve = Convert.ToByte(o[i]); break; case "PathRadiusOffset": s.PathRadiusOffset = Convert.ToSByte(o[i]); break; case "PathRevolutions": s.PathRevolutions = Convert.ToByte(o[i]); break; case "PathTaperX": s.PathTaperX = Convert.ToSByte(o[i]); break; case "PathTaperY": s.PathTaperY = Convert.ToSByte(o[i]); break; case "PathTwist": s.PathTwist = Convert.ToSByte(o[i]); break; case "PathTwistBegin": s.PathTwistBegin = Convert.ToSByte(o[i]); break; case "ProfileBegin": s.ProfileBegin = Convert.ToUInt16(o[i]); break; case "ProfileEnd": s.ProfileEnd = Convert.ToUInt16(o[i]); break; case "ProfileCurve": s.ProfileCurve = Convert.ToByte(o[i]); break; case "ProfileHollow": s.ProfileHollow = Convert.ToUInt16(o[i]); break; case "State": s.State = Convert.ToByte(o[i]); break; case "Texture": byte[] textureEntry = (byte[])o[i]; s.TextureEntry = textureEntry; break; case "ExtraParams": s.ExtraParams = (byte[])o[i]; break; case "Media": if (!(o[i] is System.DBNull)) s.Media = PrimitiveBaseShape.MediaList.FromXml((string)o[i]); break; default: m_log.Warn("[MySQL]: Unknown database row: " + name); break; } #endregion } } catch(Exception ex) { m_log.Warn("[MySQL]: Exception loading a SceneObject, " + ex.ToString() + ", deleting.."); this.RemoveObject(prim.UUID, UUID.Zero); } s.Scale = new Vector3(ScaleX, ScaleY, ScaleZ); prim.Shape = s; prim.SoundFlags = 1; // If it's persisted at all, it's looped prim.Color = Color.FromArgb(ColorA, ColorR, ColorG, ColorB); prim.FixOffsetPosition(new Vector3(PositionX, PositionY, PositionZ),true); prim.FixGroupPosition( new Vector3(GroupPositionX, GroupPositionY, GroupPositionZ),true); prim.Velocity = new Vector3(VelocityX, VelocityY, VelocityZ); prim.AngularVelocity = new Vector3(AngularVelocityX, AngularVelocityY, AngularVelocityZ); prim.RotationOffset = new Quaternion(RotationX, RotationY, RotationZ, RotationW); prim.SitTargetPositionLL = new Vector3(SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ); prim.SitTargetOrientationLL = new Quaternion(SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ, SitTargetOrientW); prim.AngularVelocity = new Vector3(OmegaX, OmegaY, OmegaZ); prim.CameraEyeOffset = new Vector3(CameraEyeOffsetX, CameraEyeOffsetY, CameraEyeOffsetZ); prim.CameraAtOffset = new Vector3(CameraAtOffsetX, CameraAtOffsetY, CameraAtOffsetZ); return prim; }
/*********************************************************************** * * Convert between ADO.NET <=> OpenSim Objects * * These should be database independant * **********************************************************************/ /// <summary> /// /// </summary> /// <param name="row"></param> /// <returns></returns> private SceneObjectPart buildPrim(IDataReader row, IScene scene) { // Code commented. Uncomment to test the unit test inline. // The unit test mentions this commented code for the purposes // of debugging a unit test failure // SceneObjectGroup sog = new SceneObjectGroup(); // SceneObjectPart sop = new SceneObjectPart(); // sop.LocalId = 1; // sop.Name = "object1"; // sop.Description = "object1"; // sop.Text = ""; // sop.SitName = ""; // sop.TouchName = ""; // sop.UUID = UUID.Random(); // sop.Shape = PrimitiveBaseShape.Default; // sog.SetRootPart(sop); // Add breakpoint in above line. Check sop fields. // TODO: this doesn't work yet because something more // interesting has to be done to actually get these values // back out. Not enough time to figure it out yet. object[] o = new object[row.FieldCount]; row.GetValues(o); SceneObjectPart prim = new SceneObjectPart(scene); int ColorA = 0; int ColorR = 0; int ColorG = 0; int ColorB = 0; float PositionX = 0; float PositionY = 0; float PositionZ = 0; float GroupPositionX = 0; float GroupPositionY = 0; float GroupPositionZ = 0; float VelocityX = 0; float VelocityY = 0; float VelocityZ = 0; float AngularVelocityX = 0; float AngularVelocityY = 0; float AngularVelocityZ = 0; float AccelerationX = 0; float AccelerationY = 0; float AccelerationZ = 0; float RotationX = 0; float RotationY = 0; float RotationZ = 0; float RotationW = 0; float SitTargetOffsetX = 0; float SitTargetOffsetY = 0; float SitTargetOffsetZ = 0; float SitTargetOrientX = 0; float SitTargetOrientY = 0; float SitTargetOrientZ = 0; float SitTargetOrientW = 0; float OmegaX = 0; float OmegaY = 0; float OmegaZ = 0; float CameraEyeOffsetX = 0; float CameraEyeOffsetY = 0; float CameraEyeOffsetZ = 0; float CameraAtOffsetX = 0; float CameraAtOffsetY = 0; float CameraAtOffsetZ = 0; for (int i = 0; i < o.Length; i++) { string name = row.GetName(i); #region Switch switch (name) { case "UUID": prim.UUID = DBGuid.FromDB(o[i]); break; case "CreatorID": prim.CreatorID = DBGuid.FromDB (o[i].ToString ()); break; case "OwnerID": prim.OwnerID = DBGuid.FromDB (o[i].ToString ()); break; case "GroupID": prim.GroupID = DBGuid.FromDB (o[i].ToString ()); break; case "LastOwnerID": prim.LastOwnerID = DBGuid.FromDB (o[i].ToString ()); break; case "CreationDate": prim.CreationDate = Convert.ToInt32(o[i].ToString()); break; case "Name": if(!(o[i] is DBNull)) prim.Name = o[i].ToString(); break; case "Text": prim.Text = o[i].ToString(); break; case "ColorA": ColorA = Convert.ToInt32(o[i].ToString()); break; case "ColorR": ColorR = Convert.ToInt32(o[i].ToString()); break; case "ColorG": ColorG = Convert.ToInt32(o[i].ToString()); break; case "ColorB": ColorB = Convert.ToInt32(o[i].ToString()); break; case "Description": prim.Description = o[i].ToString(); break; case "SitName": prim.SitName = o[i].ToString(); break; case "TouchName": prim.TouchName = o[i].ToString(); break; case "ObjectFlags": prim.Flags = (PrimFlags)Convert.ToUInt32(o[i].ToString()); break; case "OwnerMask": prim.OwnerMask = Convert.ToUInt32(o[i].ToString()); break; case "NextOwnerMask": prim.NextOwnerMask = Convert.ToUInt32(o[i].ToString()); break; case "GroupMask": prim.GroupMask = Convert.ToUInt32(o[i].ToString()); break; case "EveryoneMask": prim.EveryoneMask = Convert.ToUInt32(o[i].ToString()); break; case "BaseMask": prim.BaseMask = Convert.ToUInt32(o[i].ToString()); break; case "PositionX": PositionX = Convert.ToSingle(o[i].ToString()); break; case "PositionY": PositionY = Convert.ToSingle(o[i].ToString()); break; case "PositionZ": PositionZ = Convert.ToSingle(o[i].ToString()); break; case "GroupPositionX": GroupPositionX = Convert.ToSingle(o[i].ToString()); break; case "GroupPositionY": GroupPositionY = Convert.ToSingle(o[i].ToString()); break; case "GroupPositionZ": GroupPositionZ = Convert.ToSingle(o[i].ToString()); break; case "VelocityX": VelocityX = Convert.ToSingle(o[i].ToString()); break; case "VelocityY": VelocityY = Convert.ToSingle(o[i].ToString()); break; case "VelocityZ": VelocityZ = Convert.ToSingle(o[i].ToString()); break; case "AngularVelocityX": AngularVelocityX = Convert.ToSingle(o[i].ToString()); break; case "AngularVelocityY": AngularVelocityY = Convert.ToSingle(o[i].ToString()); break; case "AngularVelocityZ": AngularVelocityZ = Convert.ToSingle(o[i].ToString()); break; case "AccelerationX": AccelerationX = Convert.ToSingle(o[i].ToString()); break; case "AccelerationY": AccelerationY = Convert.ToSingle(o[i].ToString()); break; case "AccelerationZ": AccelerationZ = Convert.ToSingle(o[i].ToString()); break; case "RotationX": RotationX = Convert.ToSingle(o[i].ToString()); break; case "RotationY": RotationY = Convert.ToSingle(o[i].ToString()); break; case "RotationZ": RotationZ = Convert.ToSingle(o[i].ToString()); break; case "RotationW": RotationW = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOffsetX": SitTargetOffsetX = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOffsetY": SitTargetOffsetY = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOffsetZ": SitTargetOffsetZ = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientX": SitTargetOrientX = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientY": SitTargetOrientY = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientZ": SitTargetOrientZ = Convert.ToSingle(o[i].ToString()); break; case "SitTargetOrientW": SitTargetOrientW = Convert.ToSingle(o[i].ToString()); break; case "PayPrice": prim.PayPrice[0] = Convert.ToInt32(o[i].ToString()); break; case "PayButton1": prim.PayPrice[1] = Convert.ToInt32(o[i].ToString()); break; case "PayButton2": prim.PayPrice[2] = Convert.ToInt32(o[i].ToString()); break; case "PayButton3": prim.PayPrice[3] = Convert.ToInt32(o[i].ToString()); break; case "PayButton4": prim.PayPrice[4] = Convert.ToInt32(o[i].ToString()); break; case "LoopedSound": prim.Sound = new UUID(o[i].ToString()); break; case "LoopedSoundGain": prim.SoundGain = Convert.ToSingle(o[i].ToString()); break; case "TextureAnimation": if(!(row[i] is DBNull)) prim.TextureAnimation = Convert.FromBase64String(o[i].ToString()); break; case "ParticleSystem": if (!(row[i] is DBNull)) prim.ParticleSystem = Convert.FromBase64String(o[i].ToString()); break; case "OmegaX": OmegaX = Convert.ToSingle(o[i].ToString()); break; case "OmegaY": OmegaY = Convert.ToSingle(o[i].ToString()); break; case "OmegaZ": OmegaZ = Convert.ToSingle(o[i].ToString()); break; case "CameraEyeOffsetX": CameraEyeOffsetX = Convert.ToSingle(o[i].ToString()); break; case "CameraEyeOffsetY": CameraEyeOffsetY = Convert.ToSingle(o[i].ToString()); break; case "CameraEyeOffsetZ": CameraEyeOffsetZ = Convert.ToSingle(o[i].ToString()); break; case "CameraAtOffsetX": CameraAtOffsetX = Convert.ToSingle(o[i].ToString()); break; case "CameraAtOffsetY": CameraAtOffsetY = Convert.ToSingle(o[i].ToString()); break; case "CameraAtOffsetZ": CameraAtOffsetZ = Convert.ToSingle(o[i].ToString()); break; case "ForceMouselook": prim.ForceMouselook = Convert.ToInt32(o[i].ToString()) != 0; break; case "ScriptAccessPin": prim.ScriptAccessPin = Convert.ToInt32(o[i].ToString()); break; case "AllowedDrop": prim.AllowedDrop = Convert.ToInt32(o[i].ToString()) != 0; break; case "DieAtEdge": prim.DIE_AT_EDGE = Convert.ToInt32(o[i].ToString()) != 0; break; case "SalePrice": prim.SalePrice = Convert.ToInt32(o[i].ToString()); break; case "SaleType": prim.ObjectSaleType = Convert.ToByte(o[i].ToString()); break; case "Material": prim.Material = Convert.ToByte(o[i].ToString()); break; case "ClickAction": if (!(row[i] is DBNull)) prim.ClickAction = Convert.ToByte(o[i].ToString()); break; case "CollisionSound": prim.CollisionSound = new UUID(o[i].ToString()); break; case "CollisionSoundVolume": prim.CollisionSoundVolume = Convert.ToSingle(o[i].ToString()); break; case "PassTouches": prim.PassTouch = (int)Convert.ToSingle(o[i].ToString()); break; case "VolumeDetect": if(!(row[i] is DBNull)) prim.VolumeDetectActive = Convert.ToInt32(o[i].ToString()) == 1; break; case "LinkNumber": prim.LinkNum = int.Parse(o[i].ToString()); break; case "Generic": prim.GenericData = o[i].ToString(); break; case "SceneGroupID": break; case "RegionUUID": break; default: m_log.Warn("[NXGSQLite]: Unknown database row: " + name); break; } #endregion } prim.SoundFlags = 1; // If it's persisted at all, it's looped prim.Color = Color.FromArgb(ColorA, ColorR, ColorG, ColorB); prim.FixOffsetPosition ( new Vector3(PositionX, PositionY, PositionZ),true); prim.FixGroupPosition(new Vector3(GroupPositionX, GroupPositionY, GroupPositionZ),true); prim.Velocity = new Vector3(VelocityX, VelocityY, VelocityZ); prim.AngularVelocity = new Vector3(AngularVelocityX, AngularVelocityY, AngularVelocityZ); prim.RotationOffset = new Quaternion(RotationX, RotationY, RotationZ, RotationW); prim.SitTargetPositionLL = new Vector3(SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ); prim.SitTargetOrientationLL = new Quaternion(SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ, SitTargetOrientW); prim.AngularVelocity = new Vector3(OmegaX, OmegaY, OmegaZ); prim.CameraEyeOffset = new Vector3(CameraEyeOffsetX, CameraEyeOffsetY, CameraEyeOffsetZ); prim.CameraAtOffset = new Vector3 (CameraAtOffsetX, CameraAtOffsetY, CameraAtOffsetZ); prim.Acceleration = new Vector3 (AccelerationX, AccelerationY, AccelerationZ); return prim; }