aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Serialization
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Serialization')
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs122
1 files changed, 115 insertions, 7 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index e6b88a3..1cd8189 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -244,6 +244,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
244 sr.Close(); 244 sr.Close();
245 } 245 }
246 246
247 XmlNodeList keymotion = doc.GetElementsByTagName("KeyframeMotion");
248 if (keymotion.Count > 0)
249 sceneObject.RootPart.KeyframeMotion = KeyframeMotion.FromData(sceneObject, Convert.FromBase64String(keymotion[0].InnerText));
250 else
251 sceneObject.RootPart.KeyframeMotion = null;
252
247 // Script state may, or may not, exist. Not having any, is NOT 253 // Script state may, or may not, exist. Not having any, is NOT
248 // ever a problem. 254 // ever a problem.
249 sceneObject.LoadScriptState(doc); 255 sceneObject.LoadScriptState(doc);
@@ -347,6 +353,21 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
347 m_SOPXmlProcessors.Add("PayPrice2", ProcessPayPrice2); 353 m_SOPXmlProcessors.Add("PayPrice2", ProcessPayPrice2);
348 m_SOPXmlProcessors.Add("PayPrice3", ProcessPayPrice3); 354 m_SOPXmlProcessors.Add("PayPrice3", ProcessPayPrice3);
349 m_SOPXmlProcessors.Add("PayPrice4", ProcessPayPrice4); 355 m_SOPXmlProcessors.Add("PayPrice4", ProcessPayPrice4);
356
357 m_SOPXmlProcessors.Add("Buoyancy", ProcessBuoyancy);
358 m_SOPXmlProcessors.Add("Force", ProcessForce);
359 m_SOPXmlProcessors.Add("Torque", ProcessTorque);
360 m_SOPXmlProcessors.Add("VolumeDetectActive", ProcessVolumeDetectActive);
361
362
363 m_SOPXmlProcessors.Add("Vehicle", ProcessVehicle);
364
365 m_SOPXmlProcessors.Add("PhysicsShapeType", ProcessPhysicsShapeType);
366 m_SOPXmlProcessors.Add("Density", ProcessDensity);
367 m_SOPXmlProcessors.Add("Friction", ProcessFriction);
368 m_SOPXmlProcessors.Add("Bounce", ProcessBounce);
369 m_SOPXmlProcessors.Add("GravityModifier", ProcessGravityModifier);
370
350 #endregion 371 #endregion
351 372
352 #region TaskInventoryXmlProcessors initialization 373 #region TaskInventoryXmlProcessors initialization
@@ -374,7 +395,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
374 m_TaskInventoryXmlProcessors.Add("PermsMask", ProcessTIPermsMask); 395 m_TaskInventoryXmlProcessors.Add("PermsMask", ProcessTIPermsMask);
375 m_TaskInventoryXmlProcessors.Add("Type", ProcessTIType); 396 m_TaskInventoryXmlProcessors.Add("Type", ProcessTIType);
376 m_TaskInventoryXmlProcessors.Add("OwnerChanged", ProcessTIOwnerChanged); 397 m_TaskInventoryXmlProcessors.Add("OwnerChanged", ProcessTIOwnerChanged);
377 398
378 #endregion 399 #endregion
379 400
380 #region ShapeXmlProcessors initialization 401 #region ShapeXmlProcessors initialization
@@ -569,6 +590,49 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
569 obj.ClickAction = (byte)reader.ReadElementContentAsInt("ClickAction", String.Empty); 590 obj.ClickAction = (byte)reader.ReadElementContentAsInt("ClickAction", String.Empty);
570 } 591 }
571 592
593 private static void ProcessPhysicsShapeType(SceneObjectPart obj, XmlTextReader reader)
594 {
595 obj.PhysicsShapeType = (byte)reader.ReadElementContentAsInt("PhysicsShapeType", String.Empty);
596 }
597
598 private static void ProcessDensity(SceneObjectPart obj, XmlTextReader reader)
599 {
600 obj.Density = reader.ReadElementContentAsFloat("Density", String.Empty);
601 }
602
603 private static void ProcessFriction(SceneObjectPart obj, XmlTextReader reader)
604 {
605 obj.Friction = reader.ReadElementContentAsFloat("Friction", String.Empty);
606 }
607
608 private static void ProcessBounce(SceneObjectPart obj, XmlTextReader reader)
609 {
610 obj.Bounciness = reader.ReadElementContentAsFloat("Bounce", String.Empty);
611 }
612
613 private static void ProcessGravityModifier(SceneObjectPart obj, XmlTextReader reader)
614 {
615 obj.GravityModifier = reader.ReadElementContentAsFloat("GravityModifier", String.Empty);
616 }
617
618 private static void ProcessVehicle(SceneObjectPart obj, XmlTextReader reader)
619 {
620 bool errors = false;
621 SOPVehicle _vehicle = new SOPVehicle();
622
623 _vehicle.FromXml2(reader, out errors);
624
625 if (errors)
626 {
627 obj.sopVehicle = null;
628 m_log.DebugFormat(
629 "[SceneObjectSerializer]: Parsing Vehicle for object part {0} {1} encountered errors. Please see earlier log entries.",
630 obj.Name, obj.UUID);
631 }
632 else
633 obj.sopVehicle = _vehicle;
634 }
635
572 private static void ProcessShape(SceneObjectPart obj, XmlTextReader reader) 636 private static void ProcessShape(SceneObjectPart obj, XmlTextReader reader)
573 { 637 {
574 List<string> errorNodeNames; 638 List<string> errorNodeNames;
@@ -733,6 +797,25 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
733 obj.PayPrice[4] = (int)reader.ReadElementContentAsInt("PayPrice4", String.Empty); 797 obj.PayPrice[4] = (int)reader.ReadElementContentAsInt("PayPrice4", String.Empty);
734 } 798 }
735 799
800 private static void ProcessBuoyancy(SceneObjectPart obj, XmlTextReader reader)
801 {
802 obj.Buoyancy = (float)reader.ReadElementContentAsFloat("Buoyancy", String.Empty);
803 }
804
805 private static void ProcessForce(SceneObjectPart obj, XmlTextReader reader)
806 {
807 obj.Force = Util.ReadVector(reader, "Force");
808 }
809 private static void ProcessTorque(SceneObjectPart obj, XmlTextReader reader)
810 {
811 obj.Torque = Util.ReadVector(reader, "Torque");
812 }
813
814 private static void ProcessVolumeDetectActive(SceneObjectPart obj, XmlTextReader reader)
815 {
816 obj.VolumeDetectActive = Util.ReadBoolean(reader);
817 }
818
736 #endregion 819 #endregion
737 820
738 #region TaskInventoryXmlProcessors 821 #region TaskInventoryXmlProcessors
@@ -1120,6 +1203,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1120 }); 1203 });
1121 1204
1122 writer.WriteEndElement(); 1205 writer.WriteEndElement();
1206
1207 if (sog.RootPart.KeyframeMotion != null)
1208 {
1209 Byte[] data = sog.RootPart.KeyframeMotion.Serialize();
1210
1211 writer.WriteStartElement(String.Empty, "KeyframeMotion", String.Empty);
1212 writer.WriteBase64(data, 0, data.Length);
1213 writer.WriteEndElement();
1214 }
1215
1123 writer.WriteEndElement(); 1216 writer.WriteEndElement();
1124 } 1217 }
1125 1218
@@ -1218,6 +1311,27 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1218 writer.WriteElementString("PayPrice3", sop.PayPrice[3].ToString()); 1311 writer.WriteElementString("PayPrice3", sop.PayPrice[3].ToString());
1219 writer.WriteElementString("PayPrice4", sop.PayPrice[4].ToString()); 1312 writer.WriteElementString("PayPrice4", sop.PayPrice[4].ToString());
1220 1313
1314 writer.WriteElementString("Buoyancy", sop.Buoyancy.ToString());
1315
1316 WriteVector(writer, "Force", sop.Force);
1317 WriteVector(writer, "Torque", sop.Torque);
1318
1319 writer.WriteElementString("VolumeDetectActive", sop.VolumeDetectActive.ToString().ToLower());
1320
1321 if (sop.sopVehicle != null)
1322 sop.sopVehicle.ToXml2(writer);
1323
1324 if(sop.PhysicsShapeType != sop.DefaultPhysicsShapeType())
1325 writer.WriteElementString("PhysicsShapeType", sop.PhysicsShapeType.ToString().ToLower());
1326 if (sop.Density != 1000.0f)
1327 writer.WriteElementString("Density", sop.Density.ToString().ToLower());
1328 if (sop.Friction != 0.6f)
1329 writer.WriteElementString("Friction", sop.Friction.ToString().ToLower());
1330 if (sop.Bounciness != 0.5f)
1331 writer.WriteElementString("Bounce", sop.Bounciness.ToString().ToLower());
1332 if (sop.GravityModifier != 1.0f)
1333 writer.WriteElementString("GravityModifier", sop.GravityModifier.ToString().ToLower());
1334
1221 writer.WriteEndElement(); 1335 writer.WriteEndElement();
1222 } 1336 }
1223 1337
@@ -1487,12 +1601,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1487 { 1601 {
1488 TaskInventoryDictionary tinv = new TaskInventoryDictionary(); 1602 TaskInventoryDictionary tinv = new TaskInventoryDictionary();
1489 1603
1490 if (reader.IsEmptyElement)
1491 {
1492 reader.Read();
1493 return tinv;
1494 }
1495
1496 reader.ReadStartElement(name, String.Empty); 1604 reader.ReadStartElement(name, String.Empty);
1497 1605
1498 while (reader.Name == "TaskInventoryItem") 1606 while (reader.Name == "TaskInventoryItem")