/// <summary> /// Save: Generate an XmlElement representation of the EmpireData. /// </summary> /// <param name="xmldoc">The parent XmlDocument.</param> /// <returns>An XmlElement representing the EmpireData (to be written to file).</returns> public XmlElement ToXml(XmlDocument xmldoc) { XmlElement xmlelEmpireData = xmldoc.CreateElement("EmpireData"); Global.SaveData(xmldoc, xmlelEmpireData, "Id", empireId.ToString("X")); Global.SaveData(xmldoc, xmlelEmpireData, "FleetCounter", fleetCounter.ToString(System.Globalization.CultureInfo.InvariantCulture)); Global.SaveData(xmldoc, xmlelEmpireData, "DesignCounter", designCounter.ToString(System.Globalization.CultureInfo.InvariantCulture)); Global.SaveData(xmldoc, xmlelEmpireData, "TurnYear", TurnYear.ToString(System.Globalization.CultureInfo.InvariantCulture)); Global.SaveData(xmldoc, xmlelEmpireData, "TurnSubmitted", TurnSubmitted.ToString(System.Globalization.CultureInfo.InvariantCulture)); Global.SaveData(xmldoc, xmlelEmpireData, "LastTurnSubmitted", LastTurnSubmitted.ToString(System.Globalization.CultureInfo.InvariantCulture)); xmlelEmpireData.AppendChild(race.ToXml(xmldoc)); XmlElement xmlelResearch = xmldoc.CreateElement("Research"); Global.SaveData(xmldoc, xmlelResearch, "Budget", ResearchBudget.ToString(System.Globalization.CultureInfo.InvariantCulture)); xmlelResearch.AppendChild(ResearchLevels.ToXml(xmldoc, "AttainedLevels")); xmlelResearch.AppendChild(ResearchResources.ToXml(xmldoc, "SpentResources")); xmlelResearch.AppendChild(ResearchTopics.ToXml(xmldoc, "Topics")); xmlelEmpireData.AppendChild(xmlelResearch); // Available Components XmlElement xmlelAvaiableComponents = xmldoc.CreateElement("AvailableComponents"); foreach (Component component in AvailableComponents.Values) { xmlelAvaiableComponents.AppendChild(component.ToXml(xmldoc)); } xmlelEmpireData.AppendChild(xmlelAvaiableComponents); // Own Designs XmlElement xmlelDesigns = xmldoc.CreateElement("Designs"); foreach (ShipDesign design in Designs.Values) { xmlelDesigns.AppendChild(design.ToXml(xmldoc)); } xmlelEmpireData.AppendChild(xmlelDesigns); XmlElement xmlelStarReports = xmldoc.CreateElement("StarReports"); foreach (StarIntel report in StarReports.Values) { xmlelStarReports.AppendChild(report.ToXml(xmldoc)); } xmlelEmpireData.AppendChild(xmlelStarReports); XmlElement xmlelOwnedStars = xmldoc.CreateElement("OwnedStars"); foreach (Star star in OwnedStars.Values) { xmlelOwnedStars.AppendChild(star.ToXml(xmldoc)); } xmlelEmpireData.AppendChild(xmlelOwnedStars); XmlElement xmlelFleetReports = xmldoc.CreateElement("FleetReports"); foreach (FleetIntel report in FleetReports.Values) { if (report.Composition.Count > 0) { xmlelFleetReports.AppendChild(report.ToXml(xmldoc)); } else { // Game crashes if it tries to write out a fleet report for a fleet with no ships. // This has been added to avoid the crash, but still let us know if zero ship fleets get this far, so we can find the cause. // Dan 04 May 17 - this is triggered after a battle (and each turn there after) in Rev# 871 // Dan 04 May 17 - I think I fixed this with Rev# 872 by updating the attacker's fleet reports after combat. Report.Error("EmpireData.ToXml(): Fleet " + report.Name + " contains no ships."); } } xmlelEmpireData.AppendChild(xmlelFleetReports); XmlElement xmlelOnedFleets = xmldoc.CreateElement("OwnedFleets"); foreach (Fleet fleet in OwnedFleets.Values) { xmlelOnedFleets.AppendChild(fleet.ToXml(xmldoc)); } xmlelEmpireData.AppendChild(xmlelOnedFleets); XmlElement xmlelEnemyIntel = xmldoc.CreateElement("OtherEmpires"); foreach (EmpireIntel report in EmpireReports.Values) { xmlelEnemyIntel.AppendChild(report.ToXml(xmldoc)); } xmlelEmpireData.AppendChild(xmlelEnemyIntel); foreach (string key in BattlePlans.Keys) { xmlelEmpireData.AppendChild(BattlePlans[key].ToXml(xmldoc)); } // Battles if (BattleReports.Count > 0) { foreach (BattleReport battle in BattleReports) { xmlelEmpireData.AppendChild(battle.ToXml(xmldoc)); } } return(xmlelEmpireData); }
/// <summary> /// Save: Serialize this Race to an <see cref="XmlElement"/>. /// </summary> /// <param name="xmldoc">The parent <see cref="XmlDocument"/>.</param> /// <returns>An <see cref="XmlElement"/> representation of the Race.</returns> public XmlElement ToXml(XmlDocument xmldoc) { XmlElement xmlelRace = xmldoc.CreateElement("Race"); xmlelRace.AppendChild(GravityTolerance.ToXml(xmldoc, "GravityTolerance")); xmlelRace.AppendChild(RadiationTolerance.ToXml(xmldoc, "RadiationTolerance")); xmlelRace.AppendChild(TemperatureTolerance.ToXml(xmldoc, "TemperatureTolerance")); // Tech xmlelRace.AppendChild(ResearchCosts.ToXml(xmldoc)); // Type; // Primary Racial Trait. Global.SaveData(xmldoc, xmlelRace, "PRT", Traits.Primary.Code); // Traits foreach (TraitEntry trait in Traits) { if (AllTraits.Data.Primary.Contains(trait.Code)) { continue; // Skip the PRT, just add LRTs here. } Global.SaveData(xmldoc, xmlelRace, "LRT", trait.Code); } // MineBuildCost Global.SaveData(xmldoc, xmlelRace, "MineBuildCost", MineBuildCost.ToString(System.Globalization.CultureInfo.InvariantCulture)); // Plural Name if (!string.IsNullOrEmpty(PluralName)) { Global.SaveData(xmldoc, xmlelRace, "PluralName", PluralName); } // Name if (!string.IsNullOrEmpty(Name)) { Global.SaveData(xmldoc, xmlelRace, "Name", Name); } // Password if (!string.IsNullOrEmpty(Password)) { Global.SaveData(xmldoc, xmlelRace, "Password", Password); } // RaceIconName if (!string.IsNullOrEmpty(Icon.Source)) { Global.SaveData(xmldoc, xmlelRace, "RaceIconName", Icon.Source); } // Factory Build Cost Global.SaveData(xmldoc, xmlelRace, "FactoryBuildCost", FactoryBuildCost.ToString(System.Globalization.CultureInfo.InvariantCulture)); // ColonistsPerResource Global.SaveData(xmldoc, xmlelRace, "ColonistsPerResource", ColonistsPerResource.ToString(System.Globalization.CultureInfo.InvariantCulture)); // FactoryProduction Global.SaveData(xmldoc, xmlelRace, "FactoryProduction", FactoryProduction.ToString(System.Globalization.CultureInfo.InvariantCulture)); // OperableFactories Global.SaveData(xmldoc, xmlelRace, "OperableFactories", OperableFactories.ToString(System.Globalization.CultureInfo.InvariantCulture)); // MineProductionRate Global.SaveData(xmldoc, xmlelRace, "MineProductionRate", MineProductionRate.ToString(System.Globalization.CultureInfo.InvariantCulture)); // OperableMines Global.SaveData(xmldoc, xmlelRace, "OperableMines", OperableMines.ToString(System.Globalization.CultureInfo.InvariantCulture)); // MaxPopulation Global.SaveData(xmldoc, xmlelRace, "MaxPopulation", MaxPopulation.ToString(System.Globalization.CultureInfo.InvariantCulture)); // GrowthRate Global.SaveData(xmldoc, xmlelRace, "GrowthRate", GrowthRate.ToString(System.Globalization.CultureInfo.InvariantCulture)); // LeftoverPointTarget if ("".Equals(LeftoverPointTarget) || LeftoverPointTarget == null) { LeftoverPointTarget = "Surface minerals"; } Global.SaveData(xmldoc, xmlelRace, "LeftoverPoints", LeftoverPointTarget.ToString(System.Globalization.CultureInfo.InvariantCulture)); return(xmlelRace); }