corrade-vassal – Rev 1
?pathlinks?
using System;
using System.IO;
using System.Xml;
namespace OpenMetaverse.Assets
{
public class RegionSettings
{
public bool AllowDamage;
public bool AllowLandResell;
public bool AllowLandJoinDivide;
public bool BlockFly;
public bool BlockLandShowInSearch;
public bool BlockTerraform;
public bool DisableCollisions;
public bool DisablePhysics;
public bool DisableScripts;
public int MaturityRating;
public bool RestrictPushing;
public int AgentLimit;
public float ObjectBonus;
public UUID TerrainDetail0;
public UUID TerrainDetail1;
public UUID TerrainDetail2;
public UUID TerrainDetail3;
public float TerrainHeightRange00;
public float TerrainHeightRange01;
public float TerrainHeightRange10;
public float TerrainHeightRange11;
public float TerrainStartHeight00;
public float TerrainStartHeight01;
public float TerrainStartHeight10;
public float TerrainStartHeight11;
public float WaterHeight;
public float TerrainRaiseLimit;
public float TerrainLowerLimit;
public bool UseEstateSun;
public bool FixedSun;
public static RegionSettings FromStream(Stream stream)
{
RegionSettings settings = new RegionSettings();
System.Globalization.NumberFormatInfo nfi = Utils.EnUsCulture.NumberFormat;
using (XmlTextReader xtr = new XmlTextReader(stream))
{
xtr.ReadStartElement("RegionSettings");
xtr.ReadStartElement("General");
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
{
switch (xtr.Name)
{
case "AllowDamage":
settings.AllowDamage = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "AllowLandResell":
settings.AllowLandResell = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "AllowLandJoinDivide":
settings.AllowLandJoinDivide = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "BlockFly":
settings.BlockFly = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "BlockLandShowInSearch":
settings.BlockLandShowInSearch = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "BlockTerraform":
settings.BlockTerraform = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "DisableCollisions":
settings.DisableCollisions = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "DisablePhysics":
settings.DisablePhysics = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "DisableScripts":
settings.DisableScripts = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "MaturityRating":
settings.MaturityRating = Int32.Parse(xtr.ReadElementContentAsString());
break;
case "RestrictPushing":
settings.RestrictPushing = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "AgentLimit":
settings.AgentLimit = Int32.Parse(xtr.ReadElementContentAsString());
break;
case "ObjectBonus":
settings.ObjectBonus = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
}
}
xtr.ReadEndElement();
xtr.ReadStartElement("GroundTextures");
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
{
switch (xtr.Name)
{
case "Texture1":
settings.TerrainDetail0 = UUID.Parse(xtr.ReadElementContentAsString());
break;
case "Texture2":
settings.TerrainDetail1 = UUID.Parse(xtr.ReadElementContentAsString());
break;
case "Texture3":
settings.TerrainDetail2 = UUID.Parse(xtr.ReadElementContentAsString());
break;
case "Texture4":
settings.TerrainDetail3 = UUID.Parse(xtr.ReadElementContentAsString());
break;
case "ElevationLowSW":
settings.TerrainStartHeight00 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "ElevationLowNW":
settings.TerrainStartHeight01 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "ElevationLowSE":
settings.TerrainStartHeight10 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "ElevationLowNE":
settings.TerrainStartHeight11 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "ElevationHighSW":
settings.TerrainHeightRange00 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "ElevationHighNW":
settings.TerrainHeightRange01 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "ElevationHighSE":
settings.TerrainHeightRange10 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "ElevationHighNE":
settings.TerrainHeightRange11 = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
}
}
xtr.ReadEndElement();
xtr.ReadStartElement("Terrain");
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
{
switch (xtr.Name)
{
case "WaterHeight":
settings.WaterHeight = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "TerrainRaiseLimit":
settings.TerrainRaiseLimit = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "TerrainLowerLimit":
settings.TerrainLowerLimit = Single.Parse(xtr.ReadElementContentAsString(), nfi);
break;
case "UseEstateSun":
settings.UseEstateSun = Boolean.Parse(xtr.ReadElementContentAsString());
break;
case "FixedSun":
settings.FixedSun = Boolean.Parse(xtr.ReadElementContentAsString());
break;
}
}
}
return settings;
}
public void ToXML(string filename)
{
StringWriter sw = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(sw) { Formatting = Formatting.Indented };
writer.WriteStartDocument();
writer.WriteStartElement(String.Empty, "RegionSettings", String.Empty);
writer.WriteStartElement(String.Empty, "General", String.Empty);
WriteBoolean(writer, "AllowDamage", AllowDamage);
WriteBoolean(writer, "AllowLandResell", AllowLandResell);
WriteBoolean(writer, "AllowLandJoinDivide", AllowLandJoinDivide);
WriteBoolean(writer, "BlockFly", BlockFly);
WriteBoolean(writer, "BlockLandShowInSearch", BlockLandShowInSearch);
WriteBoolean(writer, "BlockTerraform", BlockTerraform);
WriteBoolean(writer, "DisableCollisions", DisableCollisions);
WriteBoolean(writer, "DisablePhysics", DisablePhysics);
WriteBoolean(writer, "DisableScripts", DisableScripts);
writer.WriteElementString("MaturityRating", MaturityRating.ToString());
WriteBoolean(writer, "RestrictPushing", RestrictPushing);
writer.WriteElementString("AgentLimit", AgentLimit.ToString());
writer.WriteElementString("ObjectBonus", ObjectBonus.ToString());
writer.WriteEndElement();
writer.WriteStartElement(String.Empty, "GroundTextures", String.Empty);
writer.WriteElementString("Texture1", TerrainDetail0.ToString());
writer.WriteElementString("Texture2", TerrainDetail1.ToString());
writer.WriteElementString("Texture3", TerrainDetail2.ToString());
writer.WriteElementString("Texture4", TerrainDetail3.ToString());
writer.WriteElementString("ElevationLowSW", TerrainStartHeight00.ToString());
writer.WriteElementString("ElevationLowNW", TerrainStartHeight01.ToString());
writer.WriteElementString("ElevationLowSE", TerrainStartHeight10.ToString());
writer.WriteElementString("ElevationLowNE", TerrainStartHeight11.ToString());
writer.WriteElementString("ElevationHighSW", TerrainHeightRange00.ToString());
writer.WriteElementString("ElevationHighNW", TerrainHeightRange01.ToString());
writer.WriteElementString("ElevationHighSE", TerrainHeightRange10.ToString());
writer.WriteElementString("ElevationHighNE", TerrainHeightRange11.ToString());
writer.WriteEndElement();
writer.WriteStartElement(String.Empty, "Terrain", String.Empty);
writer.WriteElementString("WaterHeight", WaterHeight.ToString());
writer.WriteElementString("TerrainRaiseLimit", TerrainRaiseLimit.ToString());
writer.WriteElementString("TerrainLowerLimit", TerrainLowerLimit.ToString());
WriteBoolean(writer, "UseEstateSun", UseEstateSun);
WriteBoolean(writer, "FixedSun", FixedSun);
writer.WriteEndElement();
writer.WriteEndElement();
writer.Close();
sw.Close();
File.WriteAllText(filename, sw.ToString());
}
private void WriteBoolean(XmlTextWriter writer, string name, bool value)
{
writer.WriteElementString(name, value ? "True" : "False");
}
}
}