save/load environments to/from oars

This commit is contained in:
UbitUmarov
2020-06-22 15:46:39 +01:00
parent 7b77609537
commit 8fe2cd6c46
13 changed files with 146 additions and 36 deletions

View File

@@ -46,9 +46,10 @@ namespace OpenSim.Framework.Serialization.External
/// <param name="serializedSettings"></param>
/// <returns></returns>
/// <exception cref="System.Xml.XmlException"></exception>
public static RegionSettings Deserialize(byte[] serializedSettings)
public static RegionSettings Deserialize(byte[] serializedSettings, out ViewerEnvironment regionEnv)
{
return Deserialize(Encoding.ASCII.GetString(serializedSettings, 0, serializedSettings.Length));
// encoding is wrong. old oars seem to be on utf-16
return Deserialize(Encoding.ASCII.GetString(serializedSettings, 0, serializedSettings.Length), out regionEnv);
}
/// <summary>
@@ -57,9 +58,10 @@ namespace OpenSim.Framework.Serialization.External
/// <param name="serializedSettings"></param>
/// <returns></returns>
/// <exception cref="System.Xml.XmlException"></exception>
public static RegionSettings Deserialize(string serializedSettings)
public static RegionSettings Deserialize(string serializedSettings, out ViewerEnvironment regionEnv)
{
RegionSettings settings = new RegionSettings();
regionEnv = null;
StringReader sr = new StringReader(serializedSettings);
XmlTextReader xtr = new XmlTextReader(sr);
@@ -210,13 +212,28 @@ namespace OpenSim.Framework.Serialization.External
}
}
if (xtr.IsStartElement("Environment"))
{
xtr.ReadStartElement("Environment");
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
{
switch (xtr.Name)
{
case "data":
regionEnv = ViewerEnvironment.FromOSDString(xtr.ReadElementContentAsString());
break;
}
}
}
xtr.Close();
sr.Close();
return settings;
}
public static string Serialize(RegionSettings settings)
public static string Serialize(RegionSettings settings, ViewerEnvironment RegionEnv)
{
StringWriter sw = new StringWriter();
XmlTextWriter xtw = new XmlTextWriter(sw);
@@ -263,8 +280,6 @@ namespace OpenSim.Framework.Serialization.External
xtw.WriteElementString("UseEstateSun", settings.UseEstateSun.ToString());
xtw.WriteElementString("FixedSun", settings.FixedSun.ToString());
xtw.WriteElementString("SunPosition", settings.SunPosition.ToString());
// Note: 'SunVector' isn't saved because this value is owned by the Sun Module, which
// calculates it automatically according to the date and other factors.
xtw.WriteEndElement();
xtw.WriteStartElement("Telehub");
@@ -276,6 +291,13 @@ namespace OpenSim.Framework.Serialization.External
}
xtw.WriteEndElement();
if (RegionEnv != null)
{
xtw.WriteStartElement("Environment");
xtw.WriteElementString("data", ViewerEnvironment.ToOSDString(RegionEnv));
xtw.WriteEndElement();
}
xtw.WriteEndElement();
xtw.Close();