public override void ReadXml(XDocument doc) { XElement attackManipulator = doc.Descendants("Manipulator") .SingleOrDefault(manipulator => manipulator.Attribute("Type").Value == "Attack"); if (attackManipulator != null) { // Settings var settingsNode = attackManipulator.Element("Plans"); Debug.Assert(settingsNode != null); Func <string, bool, bool> readSetting = (settingName, defaultValue) => { XAttribute value = settingsNode.Attribute(settingName); return(value != null?Convert.ToBoolean(value.Value) : defaultValue); }; Settings.ShowOtherTargets = readSetting("ShowOtherTargets", true); Settings.ShowOtherAttackers = readSetting("ShowOtherAttackers", true); Settings.ShowIfNotActiveManipulator = readSetting("ShowIfNotActiveManipulator", true); Settings.ShowArrivalTimeWhenSentNow = readSetting("ShowArrivalTimeWhenSentNow", false); // AttackPlans var plans = attackManipulator.Descendants("Plan"); foreach (XElement xmlPlan in plans) { var plan = new AttackPlan( World.Default.GetVillage(xmlPlan.Attribute("Target").Value), DateTime.FromFileTimeUtc(long.Parse(xmlPlan.Attribute("ArrivalTime").Value))); if (xmlPlan.Attribute("Comments") != null) { plan.Comments = xmlPlan.Attribute("Comments").Value; } if (plan.Target != null) { foreach (var attackerXml in xmlPlan.Descendants("Attacker")) { var slowestUnit = (UnitTypes)Enum.Parse(typeof(UnitTypes), attackerXml.Attribute("SlowestUnit").Value); var attacker = new AttackPlanFrom( plan, World.Default.GetVillage(attackerXml.Attribute("Attacker").Value), WorldUnits.Default[slowestUnit]); plan.AddAttacker(attacker); } _plans.Add(plan); } } } }
private void AddAttacker(AttackPlan plan, AttackPlanFrom attacker) { Debug.Assert(!plan.Attacks.Contains(attacker)); ActiveAttacker = attacker; plan.AddAttacker(attacker); }
public override void ReadXml(XDocument doc) { XElement attackManipulator = doc.Descendants("Manipulator") .SingleOrDefault(manipulator => manipulator.Attribute("Type").Value == "Attack"); if (attackManipulator != null) { // Settings var settingsNode = attackManipulator.Element("Plans"); Debug.Assert(settingsNode != null); Func<string, bool, bool> readSetting = (settingName, defaultValue) => { XAttribute value = settingsNode.Attribute(settingName); return value != null ? Convert.ToBoolean(value.Value) : defaultValue; }; Settings.ShowOtherTargets = readSetting("ShowOtherTargets", true); Settings.ShowOtherAttackers = readSetting("ShowOtherAttackers", true); Settings.ShowIfNotActiveManipulator = readSetting("ShowIfNotActiveManipulator", true); Settings.ShowArrivalTimeWhenSentNow = readSetting("ShowArrivalTimeWhenSentNow", false); // AttackPlans var plans = attackManipulator.Descendants("Plan"); foreach (XElement xmlPlan in plans) { var plan = new AttackPlan( World.Default.GetVillage(xmlPlan.Attribute("Target").Value), DateTime.FromFileTimeUtc(long.Parse(xmlPlan.Attribute("ArrivalTime").Value))); if (xmlPlan.Attribute("Comments") != null) { plan.Comments = xmlPlan.Attribute("Comments").Value; } if (plan.Target != null) { foreach (var attackerXml in xmlPlan.Descendants("Attacker")) { var slowestUnit = (UnitTypes)Enum.Parse(typeof(UnitTypes), attackerXml.Attribute("SlowestUnit").Value); var attacker = new AttackPlanFrom( plan, World.Default.GetVillage(attackerXml.Attribute("Attacker").Value), WorldUnits.Default[slowestUnit]); plan.AddAttacker(attacker); } _plans.Add(plan); } } } }
private void AddAttacker(AttackPlan plan, AttackPlanFrom attacker) { Debug.Assert(!plan.Attacks.Contains(attacker)); ActiveAttacker = attacker; plan.AddAttacker(attacker); }