public void Save(XmlWriter writer)
{
writer.WriteStartElement("Galaxy");
writer.WriteAttributeString("Width", GalaxySize.ToString());
writer.WriteAttributeString("Height", GalaxySize.ToString()); //Unused at the moment until I refactor the galaxy size to be rectangle
writer.WriteStartElement("Stars");
foreach (var star in starSystems)
{
writer.WriteStartElement("Star");
writer.WriteAttributeString("ID", star.ID.ToString());
writer.WriteAttributeString("Name", star.Name);
writer.WriteAttributeString("Description", star.Description);
writer.WriteAttributeString("XPos", star.X.ToString());
writer.WriteAttributeString("YPos", star.Y.ToString());
writer.WriteAttributeString("Color", star.StarColor[0] + "," + star.StarColor[1] + "," + star.StarColor[2] + "," + star.StarColor[3]);
string exploredByList = string.Empty;
foreach (var exploredBy in star.ExploredBy)
{
exploredByList = exploredByList + exploredBy.EmpireID + ",";
}
exploredByList = exploredByList.TrimEnd(new[] {','});
writer.WriteAttributeString("ExploredBy", exploredByList);
foreach (var planet in star.Planets)
{
writer.WriteStartElement("Planet");
writer.WriteAttributeString("Name", planet.Name);
writer.WriteAttributeString("Type", planet.PlanetTypeString);
writer.WriteAttributeString("Owner", planet.Owner == null ? "-1" : planet.Owner.EmpireID.ToString());
writer.WriteAttributeString("MaxPopulation", planet.PopulationMax.ToString());
writer.WriteAttributeString("Buildings", planet.Factories.ToString());
writer.WriteAttributeString("EnvironmentPercentage", planet.EnvironmentAmount.ToString());
writer.WriteAttributeString("InfrastructurePercentage", planet.InfrastructureAmount.ToString());
writer.WriteAttributeString("DefensePercentage", planet.DefenseAmount.ToString());
writer.WriteAttributeString("ConstructionPercentage", planet.ConstructionAmount.ToString());
writer.WriteAttributeString("ResearchPercentage", planet.ResearchAmount.ToString());
writer.WriteAttributeString("EnvironmentLocked", planet.EnvironmentLocked.ToString());
writer.WriteAttributeString("InfrastructureLocked", planet.InfrastructureLocked.ToString());
writer.WriteAttributeString("DefenseLocked", planet.DefenseLocked.ToString());
writer.WriteAttributeString("ConstructionLocked", planet.ConstructionLocked.ToString());
writer.WriteAttributeString("ResearchLocked", planet.ResearchLocked.ToString());
writer.WriteAttributeString("ShipBuilding", planet.ShipBeingBuilt == null ? "-1" : planet.ShipBeingBuilt.DesignID.ToString());
writer.WriteAttributeString("AmountBuilt", planet.ShipConstructionAmount.ToString());
writer.WriteAttributeString("RelocatingTo", planet.RelocateToSystem == null ? "-1" : planet.RelocateToSystem.StarSystem.ID.ToString());
if (planet.TransferSystem.Key.StarSystem != null)
{
writer.WriteStartElement("TransferTo");
writer.WriteAttributeString("StarSystem", planet.TransferSystem.Key.StarSystem.ID.ToString());
writer.WriteAttributeString("Amount", planet.TransferSystem.Value.ToString());
writer.WriteEndElement();
}
writer.WriteStartElement("Races");
foreach (var race in planet.Races)
{
writer.WriteStartElement("Race");
writer.WriteAttributeString("RaceName", race.RaceName);
writer.WriteAttributeString("Amount", planet.GetRacePopulation(race).ToString());
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndElement();
}
writer.WriteEndElement();
}
//When neutral stuff are added, like space crystals, put them here
writer.WriteEndElement();
writer.WriteEndElement();
}