internal string CreateXmlReport()
{
var settingsDestination = new XmlWriterSettings
{
Indent = true, // Set indent to false to compress.
Encoding = new UTF8Encoding(false) // codepage 65001 without signature. Removes the Byte Order Mark from the start of the file.
};
var stringWriter = new StringWriter();
using (var xmlWriter = XmlWriter.Create(stringWriter, settingsDestination))
{
xmlWriter.WriteStartElement("report");
xmlWriter.WriteAttributeString("title", "Resource Report");
xmlWriter.WriteAttributeString("world", _saveName);
xmlWriter.WriteAttributeFormat("date", "{0:o}", _generatedDate);
#region In game resources
foreach (var item in _untouchedOre)
{
xmlWriter.WriteStartElement("untouched");
xmlWriter.WriteElementFormat("orename", "{0}", item.MaterialName);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteEndElement();
}
foreach (var item in _unusedOre)
{
xmlWriter.WriteStartElement("unused");
xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteEndElement();
}
foreach (var item in _usedOre)
{
xmlWriter.WriteStartElement("used");
xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteEndElement();
}
foreach (var item in _playerOre)
{
xmlWriter.WriteStartElement("player");
xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteEndElement();
}
foreach (var item in _npcOre)
{
xmlWriter.WriteStartElement("npc");
xmlWriter.WriteElementFormat("name", "{0}", item.FriendlyName);
xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteEndElement();
}
#endregion
#region In game assets
foreach (var item in _allCubes)
{
xmlWriter.WriteStartElement("cubes");
xmlWriter.WriteElementFormat("friendlyname", "{0}", item.FriendlyName);
xmlWriter.WriteElementFormat("name", "{0}", item.Name);
xmlWriter.WriteElementFormat("typeid", "{0}", item.TypeId);
xmlWriter.WriteElementFormat("subtypeid", "{0}", item.SubtypeId);
xmlWriter.WriteElementFormat("count", "{0:0}", item.Count);
xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
xmlWriter.WriteElementFormat("time", "{0}", item.Time);
xmlWriter.WriteEndElement();
}
foreach (var item in _allComponents)
{
xmlWriter.WriteStartElement("components");
xmlWriter.WriteElementFormat("friendlyname", "{0}", item.FriendlyName);
xmlWriter.WriteElementFormat("name", "{0}", item.Name);
xmlWriter.WriteElementFormat("typeid", "{0}", item.TypeId);
xmlWriter.WriteElementFormat("subtypeid", "{0}", item.SubtypeId);
xmlWriter.WriteElementFormat("count", "{0:0}", item.Count);
xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteElementFormat("time", "{0}", item.Time);
xmlWriter.WriteEndElement();
}
foreach (var item in _allItems)
{
xmlWriter.WriteStartElement("items");
xmlWriter.WriteElementFormat("friendlyname", "{0}", item.FriendlyName);
xmlWriter.WriteElementFormat("name", "{0}", item.Name);
xmlWriter.WriteElementFormat("typeid", "{0}", item.TypeId);
xmlWriter.WriteElementFormat("subtypeid", "{0}", item.SubtypeId);
xmlWriter.WriteElementFormat("count", "{0:0}", item.Count);
xmlWriter.WriteElementFormat("mass", "{0:0.000}", item.Mass);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteElementFormat("time", "{0}", item.Time);
xmlWriter.WriteEndElement();
}
#endregion
#region Asteroid breakdown
foreach (var asteroid in _untouchedOreByAsteroid)
{
xmlWriter.WriteStartElement("asteroids");
xmlWriter.WriteAttributeString("name", asteroid.Name);
foreach (var item in asteroid.UntouchedOreList)
{
xmlWriter.WriteStartElement("untouched");
xmlWriter.WriteElementFormat("orename", "{0}", item.MaterialName);
xmlWriter.WriteElementFormat("volume", "{0:0.000}", item.Volume);
xmlWriter.WriteEndElement();
}
xmlWriter.WriteEndElement();
}
#endregion
#region Ship breakdown
// TODO:
#endregion
xmlWriter.WriteEndElement();
}
return stringWriter.ToString();
}