示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }