diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | 135 |
1 files changed, 128 insertions, 7 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index 2d4c60a..123c158 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | |||
@@ -262,6 +262,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
262 | sr.Close(); | 262 | sr.Close(); |
263 | } | 263 | } |
264 | 264 | ||
265 | XmlNodeList keymotion = doc.GetElementsByTagName("KeyframeMotion"); | ||
266 | if (keymotion.Count > 0) | ||
267 | sceneObject.RootPart.KeyframeMotion = KeyframeMotion.FromData(sceneObject, Convert.FromBase64String(keymotion[0].InnerText)); | ||
268 | else | ||
269 | sceneObject.RootPart.KeyframeMotion = null; | ||
270 | |||
265 | // Script state may, or may not, exist. Not having any, is NOT | 271 | // Script state may, or may not, exist. Not having any, is NOT |
266 | // ever a problem. | 272 | // ever a problem. |
267 | sceneObject.LoadScriptState(doc); | 273 | sceneObject.LoadScriptState(doc); |
@@ -366,6 +372,23 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
366 | m_SOPXmlProcessors.Add("PayPrice2", ProcessPayPrice2); | 372 | m_SOPXmlProcessors.Add("PayPrice2", ProcessPayPrice2); |
367 | m_SOPXmlProcessors.Add("PayPrice3", ProcessPayPrice3); | 373 | m_SOPXmlProcessors.Add("PayPrice3", ProcessPayPrice3); |
368 | m_SOPXmlProcessors.Add("PayPrice4", ProcessPayPrice4); | 374 | m_SOPXmlProcessors.Add("PayPrice4", ProcessPayPrice4); |
375 | |||
376 | m_SOPXmlProcessors.Add("Buoyancy", ProcessBuoyancy); | ||
377 | m_SOPXmlProcessors.Add("Force", ProcessForce); | ||
378 | m_SOPXmlProcessors.Add("Torque", ProcessTorque); | ||
379 | m_SOPXmlProcessors.Add("VolumeDetectActive", ProcessVolumeDetectActive); | ||
380 | |||
381 | |||
382 | m_SOPXmlProcessors.Add("Vehicle", ProcessVehicle); | ||
383 | |||
384 | m_SOPXmlProcessors.Add("PhysicsShapeType", ProcessPhysicsShapeType); | ||
385 | m_SOPXmlProcessors.Add("Density", ProcessDensity); | ||
386 | m_SOPXmlProcessors.Add("Friction", ProcessFriction); | ||
387 | m_SOPXmlProcessors.Add("Bounce", ProcessBounce); | ||
388 | m_SOPXmlProcessors.Add("GravityModifier", ProcessGravityModifier); | ||
389 | m_SOPXmlProcessors.Add("CameraEyeOffset", ProcessCameraEyeOffset); | ||
390 | m_SOPXmlProcessors.Add("CameraAtOffset", ProcessCameraAtOffset); | ||
391 | |||
369 | #endregion | 392 | #endregion |
370 | 393 | ||
371 | #region TaskInventoryXmlProcessors initialization | 394 | #region TaskInventoryXmlProcessors initialization |
@@ -393,7 +416,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
393 | m_TaskInventoryXmlProcessors.Add("PermsMask", ProcessTIPermsMask); | 416 | m_TaskInventoryXmlProcessors.Add("PermsMask", ProcessTIPermsMask); |
394 | m_TaskInventoryXmlProcessors.Add("Type", ProcessTIType); | 417 | m_TaskInventoryXmlProcessors.Add("Type", ProcessTIType); |
395 | m_TaskInventoryXmlProcessors.Add("OwnerChanged", ProcessTIOwnerChanged); | 418 | m_TaskInventoryXmlProcessors.Add("OwnerChanged", ProcessTIOwnerChanged); |
396 | 419 | ||
397 | #endregion | 420 | #endregion |
398 | 421 | ||
399 | #region ShapeXmlProcessors initialization | 422 | #region ShapeXmlProcessors initialization |
@@ -593,6 +616,58 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
593 | obj.ClickAction = (byte)reader.ReadElementContentAsInt("ClickAction", String.Empty); | 616 | obj.ClickAction = (byte)reader.ReadElementContentAsInt("ClickAction", String.Empty); |
594 | } | 617 | } |
595 | 618 | ||
619 | private static void ProcessPhysicsShapeType(SceneObjectPart obj, XmlTextReader reader) | ||
620 | { | ||
621 | obj.PhysicsShapeType = (byte)reader.ReadElementContentAsInt("PhysicsShapeType", String.Empty); | ||
622 | } | ||
623 | |||
624 | private static void ProcessDensity(SceneObjectPart obj, XmlTextReader reader) | ||
625 | { | ||
626 | obj.Density = reader.ReadElementContentAsFloat("Density", String.Empty); | ||
627 | } | ||
628 | |||
629 | private static void ProcessFriction(SceneObjectPart obj, XmlTextReader reader) | ||
630 | { | ||
631 | obj.Friction = reader.ReadElementContentAsFloat("Friction", String.Empty); | ||
632 | } | ||
633 | |||
634 | private static void ProcessBounce(SceneObjectPart obj, XmlTextReader reader) | ||
635 | { | ||
636 | obj.Bounciness = reader.ReadElementContentAsFloat("Bounce", String.Empty); | ||
637 | } | ||
638 | |||
639 | private static void ProcessGravityModifier(SceneObjectPart obj, XmlTextReader reader) | ||
640 | { | ||
641 | obj.GravityModifier = reader.ReadElementContentAsFloat("GravityModifier", String.Empty); | ||
642 | } | ||
643 | |||
644 | private static void ProcessCameraEyeOffset(SceneObjectPart obj, XmlTextReader reader) | ||
645 | { | ||
646 | obj.SetCameraEyeOffset(Util.ReadVector(reader, "CameraEyeOffset")); | ||
647 | } | ||
648 | |||
649 | private static void ProcessCameraAtOffset(SceneObjectPart obj, XmlTextReader reader) | ||
650 | { | ||
651 | obj.SetCameraAtOffset(Util.ReadVector(reader, "CameraAtOffset")); | ||
652 | } | ||
653 | |||
654 | private static void ProcessVehicle(SceneObjectPart obj, XmlTextReader reader) | ||
655 | { | ||
656 | SOPVehicle vehicle = SOPVehicle.FromXml2(reader); | ||
657 | |||
658 | if (vehicle == null) | ||
659 | { | ||
660 | obj.VehicleParams = null; | ||
661 | m_log.DebugFormat( | ||
662 | "[SceneObjectSerializer]: Parsing Vehicle for object part {0} {1} encountered errors. Please see earlier log entries.", | ||
663 | obj.Name, obj.UUID); | ||
664 | } | ||
665 | else | ||
666 | { | ||
667 | obj.VehicleParams = vehicle; | ||
668 | } | ||
669 | } | ||
670 | |||
596 | private static void ProcessShape(SceneObjectPart obj, XmlTextReader reader) | 671 | private static void ProcessShape(SceneObjectPart obj, XmlTextReader reader) |
597 | { | 672 | { |
598 | List<string> errorNodeNames; | 673 | List<string> errorNodeNames; |
@@ -757,6 +832,25 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
757 | obj.PayPrice[4] = (int)reader.ReadElementContentAsInt("PayPrice4", String.Empty); | 832 | obj.PayPrice[4] = (int)reader.ReadElementContentAsInt("PayPrice4", String.Empty); |
758 | } | 833 | } |
759 | 834 | ||
835 | private static void ProcessBuoyancy(SceneObjectPart obj, XmlTextReader reader) | ||
836 | { | ||
837 | obj.Buoyancy = (float)reader.ReadElementContentAsFloat("Buoyancy", String.Empty); | ||
838 | } | ||
839 | |||
840 | private static void ProcessForce(SceneObjectPart obj, XmlTextReader reader) | ||
841 | { | ||
842 | obj.Force = Util.ReadVector(reader, "Force"); | ||
843 | } | ||
844 | private static void ProcessTorque(SceneObjectPart obj, XmlTextReader reader) | ||
845 | { | ||
846 | obj.Torque = Util.ReadVector(reader, "Torque"); | ||
847 | } | ||
848 | |||
849 | private static void ProcessVolumeDetectActive(SceneObjectPart obj, XmlTextReader reader) | ||
850 | { | ||
851 | obj.VolumeDetectActive = Util.ReadBoolean(reader); | ||
852 | } | ||
853 | |||
760 | #endregion | 854 | #endregion |
761 | 855 | ||
762 | #region TaskInventoryXmlProcessors | 856 | #region TaskInventoryXmlProcessors |
@@ -1144,6 +1238,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1144 | }); | 1238 | }); |
1145 | 1239 | ||
1146 | writer.WriteEndElement(); | 1240 | writer.WriteEndElement(); |
1241 | |||
1242 | if (sog.RootPart.KeyframeMotion != null) | ||
1243 | { | ||
1244 | Byte[] data = sog.RootPart.KeyframeMotion.Serialize(); | ||
1245 | |||
1246 | writer.WriteStartElement(String.Empty, "KeyframeMotion", String.Empty); | ||
1247 | writer.WriteBase64(data, 0, data.Length); | ||
1248 | writer.WriteEndElement(); | ||
1249 | } | ||
1250 | |||
1147 | writer.WriteEndElement(); | 1251 | writer.WriteEndElement(); |
1148 | } | 1252 | } |
1149 | 1253 | ||
@@ -1243,6 +1347,29 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1243 | writer.WriteElementString("PayPrice3", sop.PayPrice[3].ToString()); | 1347 | writer.WriteElementString("PayPrice3", sop.PayPrice[3].ToString()); |
1244 | writer.WriteElementString("PayPrice4", sop.PayPrice[4].ToString()); | 1348 | writer.WriteElementString("PayPrice4", sop.PayPrice[4].ToString()); |
1245 | 1349 | ||
1350 | writer.WriteElementString("Buoyancy", sop.Buoyancy.ToString()); | ||
1351 | |||
1352 | WriteVector(writer, "Force", sop.Force); | ||
1353 | WriteVector(writer, "Torque", sop.Torque); | ||
1354 | |||
1355 | writer.WriteElementString("VolumeDetectActive", sop.VolumeDetectActive.ToString().ToLower()); | ||
1356 | |||
1357 | if (sop.VehicleParams != null) | ||
1358 | sop.VehicleParams.ToXml2(writer); | ||
1359 | |||
1360 | if(sop.PhysicsShapeType != sop.DefaultPhysicsShapeType()) | ||
1361 | writer.WriteElementString("PhysicsShapeType", sop.PhysicsShapeType.ToString().ToLower()); | ||
1362 | if (sop.Density != 1000.0f) | ||
1363 | writer.WriteElementString("Density", sop.Density.ToString().ToLower()); | ||
1364 | if (sop.Friction != 0.6f) | ||
1365 | writer.WriteElementString("Friction", sop.Friction.ToString().ToLower()); | ||
1366 | if (sop.Bounciness != 0.5f) | ||
1367 | writer.WriteElementString("Bounce", sop.Bounciness.ToString().ToLower()); | ||
1368 | if (sop.GravityModifier != 1.0f) | ||
1369 | writer.WriteElementString("GravityModifier", sop.GravityModifier.ToString().ToLower()); | ||
1370 | WriteVector(writer, "CameraEyeOffset", sop.GetCameraEyeOffset()); | ||
1371 | WriteVector(writer, "CameraAtOffset", sop.GetCameraAtOffset()); | ||
1372 | |||
1246 | writer.WriteEndElement(); | 1373 | writer.WriteEndElement(); |
1247 | } | 1374 | } |
1248 | 1375 | ||
@@ -1467,12 +1594,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1467 | { | 1594 | { |
1468 | TaskInventoryDictionary tinv = new TaskInventoryDictionary(); | 1595 | TaskInventoryDictionary tinv = new TaskInventoryDictionary(); |
1469 | 1596 | ||
1470 | if (reader.IsEmptyElement) | ||
1471 | { | ||
1472 | reader.Read(); | ||
1473 | return tinv; | ||
1474 | } | ||
1475 | |||
1476 | reader.ReadStartElement(name, String.Empty); | 1597 | reader.ReadStartElement(name, String.Empty); |
1477 | 1598 | ||
1478 | while (reader.Name == "TaskInventoryItem") | 1599 | while (reader.Name == "TaskInventoryItem") |